【发布时间】:2015-01-28 14:26:42
【问题描述】:
在node中,当你创建一个socket server并用client连接它时,write函数会触发data事件,但是好像没有办法区分流量的来源(除了添加您自己的 ID/标头到每个发送的缓冲区)。
比如这是server.write的输出“server say hello”,那么所有的“n个client msg”都是从client.write出来的,都在on('data', fn ):
➜ sockets node client.js
client connected to server!
client data: server says hello
client data: 1 client msg!
client data: 2 client msg!
client data: 3 client msg!
client data: 4 client msg!
有没有正确的方法来区分socket上数据的来源?
一个简单客户端的代码:
// client.js
var net = require('net');
var split = require('split');
var client = net.connect({
port: 8124
}, function() {
//'connect' listener
console.log('client connected to server!');
client.write('1 client msg!\r\n');
client.write('2 client msg!\r\n');
client.write('3 client msg!\r\n');
client.write('4 client msg!\r\n');
});
client.on('end', function() {
console.log('client disconnected from server');
});
var stream = client.pipe(split());
stream.on('data', function(data) {
console.log("client data: " + data.toString());
});
和服务器的代码
// server.js
var net = require('net');
var split = require('split');
var server = net.createServer(function(c) { //'connection' listener
console.log('client connected');
c.on('end', function() {
console.log('client disconnected');
});
c.write('server says hello\r\n');
c.pipe(c);
var stream = c.pipe(split());
stream.on('data', function(data) {
console.log("client data: " + data.toString());
});
});
server.listen(8124, function() { //'listening' listener
console.log('server bound');
});
【问题讨论】: