在nodejs中区分b/w两个或多个TCP客户端?
Distinguish b/w two or more TCP clients in nodejs?
是不是每个客户都有唯一 ID 之类的东西?
假设我想使用此回显服务器将从一个客户端收到的消息回显到所有连接的客户端:
var net = require('net');
var server = net.createServer();
server.on('connection', function (server_socket) {
console.log('client connected');
server_socket.write('hello client! Say something.');
server_socket.pipe(server_socket);
server_socket.on('end', function () {
console.log('client disconnected');
});
});
server.listen(80, 'localhost');
server.on('listen', function () {
console.log('Listning for connections:');
});
server.on('error', function (error) {
console.dir(error);
});
我尝试了我所知道的一切,即
连接、请求等事件
如果您使用 socket.io,这将非常简单。您需要检查套接字对象的 属性 id:
server.on('connection', function(socket) {
console.log(socket.id + " connected");
});
只要您使用原始套接字,您就可以选择在连接时生成一个 ID,其中函数 generateUniqueSocketId() 可以 return 一个 GUID 或其他唯一的东西区分连接:
server.on('connection', function(socket) {
socket.myConnectionId = generateUniqueSocketId();
});
为了您的目的,您并不真正需要 UID,您可以尝试将所有活动连接保存在一个数组中,并在需要时广播任何数据。
var connections = [];
server.on('connection', function (socket) {
connections.push(socket);
socket.write('SOMETHING');
// Broadcast some message
connections.forEach(function (connection) {
if (connection !== socket) { // Filter connections
connection.write('SOMETHING ELSE');
}
});
// Clean up closed connections
socket.on('close', function () {
var index = connections.indexOf(socket); // Get socket index
connections.splice(index, 1); // Remove the socket from the connections
});
});
是不是每个客户都有唯一 ID 之类的东西? 假设我想使用此回显服务器将从一个客户端收到的消息回显到所有连接的客户端:
var net = require('net');
var server = net.createServer();
server.on('connection', function (server_socket) {
console.log('client connected');
server_socket.write('hello client! Say something.');
server_socket.pipe(server_socket);
server_socket.on('end', function () {
console.log('client disconnected');
});
});
server.listen(80, 'localhost');
server.on('listen', function () {
console.log('Listning for connections:');
});
server.on('error', function (error) {
console.dir(error);
});
我尝试了我所知道的一切,即 连接、请求等事件
如果您使用 socket.io,这将非常简单。您需要检查套接字对象的 属性 id:
server.on('connection', function(socket) {
console.log(socket.id + " connected");
});
只要您使用原始套接字,您就可以选择在连接时生成一个 ID,其中函数 generateUniqueSocketId() 可以 return 一个 GUID 或其他唯一的东西区分连接:
server.on('connection', function(socket) {
socket.myConnectionId = generateUniqueSocketId();
});
为了您的目的,您并不真正需要 UID,您可以尝试将所有活动连接保存在一个数组中,并在需要时广播任何数据。
var connections = [];
server.on('connection', function (socket) {
connections.push(socket);
socket.write('SOMETHING');
// Broadcast some message
connections.forEach(function (connection) {
if (connection !== socket) { // Filter connections
connection.write('SOMETHING ELSE');
}
});
// Clean up closed connections
socket.on('close', function () {
var index = connections.indexOf(socket); // Get socket index
connections.splice(index, 1); // Remove the socket from the connections
});
});