我是nodejs
的新手,并且我有一些客户端服务器实现,这些实现基本上可以使用以下方式:我提交向客户端远程服务器投掷数据的表单。后者给我发送了一些新数据。
net.createServer(function (socket) {
socket.on('error',function(err){ console.error(err)});
socket.on('data', function (data) {
some_method(data)
});
socket.on('end', function() {
console.log('CONN: disconnected');
//socket.end();
});
app.post('/api/sender', function(req, res) {
socket.write(some_input);
res.end();
});
}).listen(9000);
这效果很好,直到客户断开并重新连接为止,然后我会收到以下错误消息:
{ [Error: This socket has been ended by the other party] code: 'EPIPE' }
和该行崩溃的socket.write(some_input)
崩溃。有人可以帮忙吗?
这是如何解决的:
module.exports = function(app) {
var clients = {};
var server = net.createServer(function (socket) {
server.getConnections(function(err, count) {
var id = sha1(socket.remoteAddress);
clients[id] = {
stream: through(),
socket: socket,
}
clients[id].stream.pipe(socket);
});
socket.on('error',function(err){ console.error(err)});
socket.on('data', function (data) {
some_method(data)
});
socket.on('end', function() {
console.log('CONN: disconnected');
socket.end();
});
app.post('/api/sender', function(req, res) {
// here id is the IP adress got from req
if (clients[id]) {
clients[id].stream.write(input);
}
res.end();
});
}).listen(9000);
};