次のコードを持つTCPサーバーがあります。
// Start a TCP Server
require('net').createServer(function (socket) {
// Handle incoming messages from clients.
socket.on('data', function (data) {
console.log("received:" + data);
// Do something with the data
//...
// Send result to client
socket.write('OK'); // Code added which make the server crash
});
}).listen(10000);
クライアントが接続するたびに、サーバーはソケットからデータを取得して処理します。クライアントに応答を送信しようとしない場合、これはうまく機能します。
「socket.write("ok");」を追加すると、次のエラーが表示されます (ソケットが既に閉じられているように見えますか?):
"memoryUsage":{"rss":22474752,"heapTotal":16571136,"heapUsed":7168552}},"os":{"loadavg":[1.25634765625,1.111328125,1.00341796875],"uptime":185009}," trace":[{"column":11,"file":"net.js","function":"errnoException","line":884,"method":null,"native":false},{" column":19,"file":"net.js","function":"TCP.onread","line":539,"method":"onread","native":false}],"stack" :["エラー: ECONNRESET の読み取り"、" errnoException (net.js:884:11) で"、"TCP.onread (net.js:539:19)" で"]、"レベル":"エラー"、"メッセージ":"uncaughtException: ECONNRESET の読み取り","タイムスタンプ":"2013-09-10T14:11:29.354Z"}
何が間違っているのですか?
編集
次の Ruby コードを使用してクライアントをシミュレートします。開いているソケットごとにスレッドを使用する必要がありますか?
...
# Send test data to server
[1,2,3,4,5].each do |data|
puts "sending #{data}"
s = TCPSocket.open(host, port)
s.puts data
end