在节点中,当您创建套接字服务器并使用客户端连接它时,write
函数会触发data
事件,但似乎无法区分流量来源(除了将自己的ID /标题添加到每个发送的缓冲区之外)。
例如,这是输出"服务器说你好"来自server.write,然后是所有" n客户端消息"来自client.write,他们都出来了('数据',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!
是否有正确的方法来区分套接字上的数据源?
简单客户的代码:
// 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');
});
答案 0 :(得分:0)
流量来源是服务器。
如果您想知道服务器是否将数据回传给客户端,您必须提出自己的协议来表示。
例如,服务器可以使用换行符分隔的JSON数据进行响应,该数据以特殊字节为前缀,表示它是回声还是原始"响应(或任何其他类型的"类型"您想拥有的值)。然后客户端读入一行,检查第一个字节值以确定它是否为回声,然后JSON.parse()
在第一个字节后面的其余部分。
答案 1 :(得分:0)
您可以通过以下方式区分每个客户:
c.name = c.remoteAddress + ":" + c.remotePort;
c.on('data', function(data) {
console.log('data ' + data + ' from ' + c.name);
});