1

私はアプリに取り組んでいます。平均でレコードを挿入する必要があります。~900 レコード/秒のレート。
このために、プラットフォームとして Node.JS を使用してサーバーに接続するクライアントをリッスンする TCP に基づくコンソール アプリを構築しようとしています。

ストアド プロシージャを起動して静的テキスト (テーブル内) をパラメータとして SP に挿入していますが、機能せず、エラーもキャッチされません。

誰でもこれで私を助けてくれますか? node.jsは初めてです

私のサーバー側アプリ:

var net     = require('net');
var fs      = require('fs');
var Connection = require('tedious').Connection;
var Request = require('tedious').Request;

var HOST = '127.0.0.1';
var PORT = 7000;
var timeout = 420000; // msec - *420000 

//db conn config
var config = {
  server: '192.168.0.57',
  userName: 'sa',
  password: 'sa',
  options: {
    database: "NodeJSBenchmark",
  }
 };
var lg = function(message) {
    console.log(message);
};

var server = net.createServer();
var connection = new Connection(config);

server.on('listening', function() {
    lg('Server listening on ' + HOST +':'+ PORT);
});

server.on('connection', function(sock) {
    sock.setTimeout(timeout, function() {
        try {
            sock.end();
        }
        catch(x) {
            lg('on end' + x);
        }
    });

    function executeStatement() {
    //var storedProcName = '[NodeJSBenchmark].[dbo].[spINSERTsockdata]';
    var storedProcName = 'spINSERTsockdata';
    var request = new Request(storedProcName, function(err, rowCount) {
    if(err){
      lg('Error on insert' + err);
    }
    else {
      lg(rowCount + ' rows2');
      lg('SP fininshed running..');
  }
    connection.close();
  });

  request.addParameter('sockdata', TYPES.VarChar, 'ping'); 

  request.on('doneProc', function(rowCount, more, returnStatus) {
    lg('Rows Changed: ' + rowCount + 'Return Stat: ' + returnStatus);  
  });

  connection.callProcedure(request);
  }

    sock.setNoDelay(true);

    //sock.setEncoding('ascii');

    // Identify incoming client
    sock.name = sock.remoteAddress + ":" + sock.remotePort 

    sock.on('data', function(data) {
        try {
        //lg("CONNECTED: "+sock.name);
        //lg("INCOMING DATA: "+data);
        sock.write(data);

        connection.on('connect', function(err) {
        // If conn is active; hit db..
        executeStatement();
        });

        }
        catch(x) {
            lg(x);
        }
    });

    sock.on('end', function(data) {
        try {
            sock.end();
        }
        catch(x) {
            lg('on end' + x);
        }
    });

    sock.on('error', function(err) {
        lg(err);
    });

    sock.on('close', function(data) {

        try {
            sock.end();
        }
        catch(x) {
            lg(x);
        }

        try {
            sock.destroy();
        }
        catch(x) {
            lg('on close' + x);
        }
    });

    sock.on('timeout', function() {
    });

});

server.on('error', function(err) {
});

server.on('close', function() {
});

server.listen(PORT, HOST);

SP:

USE [NodeJSBenchmark]
GO
/****** Object:  StoredProcedure [dbo].[spINSERTsockdata]    Script Date: 9/5/2013 4:16:19 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:      <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
ALTER PROCEDURE [dbo].[spINSERTsockdata] @sockdata varchar(10)

AS

SET NOCOUNT ON

INSERT INTO [dbo].[tblSockData]
           ([inbound])
     VALUES
           (@sockdata)
4

1 に答える 1

2

次のコードを追加してみてください:
var TYPES = require('tedious').TYPES;
コードがTYPES未定義であるため


TCP/IP が SQL に対して有効になっていることを確認します。次の手順に従います。

  • SQL Server 構成マネージャーを実行します。

  • [SQL Server ネットワーク構成] > [SQLEXPRESS のプロトコル] に移動します。

  • TCP/IP が有効になっていることを確認します。

次に、TCP/IP を右クリックして [プロパティ] を選択し、IP2 の下で、IP アドレスがローカル サブネット上のコンピューターの IP アドレスに設定されていることを確認します。TCP 動的ポートが空白であることを確認し、TCP ポートが 1433 に設定されていることを確認します。 . (デフォルトでは退屈なこのポートでの試行)


以下は私のために働いているコードです(テスト済み)

var net     = require('net');
var fs      = require('fs');
var TYPES = require('tedious').TYPES;
var Connection = require('tedious').Connection;
var Request = require('tedious').Request;

var HOST = '127.0.0.1';
var PORT = 7000;
var timeout = 420000; // msec - *420000 

//db conn config
var config = {
  server: '127.0.0.1',
  userName: 'sa',
  password: '12345',
  options: {
    database: "NodeJSBenchmark",
    instanceName : "SQLEXPRESS"
  }
 };
var lg = function(message) {
    console.log(message);
};

var server = net.createServer();
var connection = new Connection(config);

connection.on('connect', function (err) {
    if (err) { return console.log('Error connecting:\t' + err); }
    else {
        console.log('CONNECTED TO MS-SQL');
    }
});

connection.on('errorMessage', function (err) {
    if (err) { return console.log('Error connecting 2:\t' + JSON.stringify(err)); }
});

connection.on('infoMessage', function (info) {
    if (err) { return console.log('Information:\t' + JSON.stringify(info)); }
});

server.on('listening', function() {
    lg('Server listening on ' + HOST +':'+ PORT);
});

server.on('connection', function (sock) {
    sock.setTimeout(timeout, function () {
        try {
            sock.end();
        }
        catch (x) {
            lg('on end' + x);
        }
    });


    function executeStatement() {
        //var storedProcName = '[NodeJSBenchmark].[dbo].[spINSERTsockdata]';
        var storedProcName = 'spINSERTsockdata';
        var request = new Request(storedProcName, function (err, rowCount) {
            if (err) {
                lg('Error on insert' + err);
            }
            else {
                lg(rowCount + ' rows2');
                lg('SP fininshed running..');
            }
            connection.close();
        });

        request.addParameter('sockdata', TYPES.VarChar, 'ping');

        request.on('doneProc', function (rowCount, more, returnStatus) {
            lg('Rows Changed: ' + rowCount + 'Return Stat: ' + returnStatus);
        });

        connection.callProcedure(request);
    }

    sock.setNoDelay(true);

    //sock.setEncoding('ascii');

    // Identify incoming client
    sock.name = sock.remoteAddress + ":" + sock.remotePort

    sock.on('data', function (data) {
        try {
            //lg("CONNECTED: "+sock.name);
            //lg("INCOMING DATA: "+data);
            sock.write(data);
            executeStatement();
        }
        catch (x) {
            lg(x);
        }
    });

    sock.on('end', function (data) {
        try {
            sock.end();
        }
        catch (x) {
            lg('on end' + x);
        }
    });

    sock.on('error', function (err) {
        lg(err);
    });

    sock.on('close', function (data) {

        try {
            sock.end();
        }
        catch (x) {
            lg(x);
        }

        try {
            sock.destroy();
        }
        catch (x) {
            lg('on close' + x);
        }
    });

    sock.on('timeout', function () {
    });

});

server.on('error', function(err) {
});

server.on('close', function() {
});

server.listen(PORT, HOST);
于 2013-09-05T09:56:23.540 に答える