在nodejs中区分两个或更多个TCP客户端?

时间:2015-07-07 18:10:52

标签: node.js client tcpserver

是否有任何唯一ID或每个客户的东西? 假设我想使用此echo服务器将从一个客户端收到的消息回送给所有连接的客户端:

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);
});

我尝试了我所知道的一切,即 连接,请求等事件。

2 个答案:

答案 0 :(得分:0)

如果您使用socket.io,这将非常简单。您需要检查socket-object的属性id:

server.on('connection', function(socket) {
   console.log(socket.id + " connected");
});

只要你使用原始套接字就可以选择在connect上生成一个id,其中函数 generateUniqueSocketId()可以返回一个GUID或一些唯一的东西来区分连接:

server.on('connection', function(socket) {
   socket.myConnectionId = generateUniqueSocketId();
});

答案 1 :(得分:0)

出于您的目的,您实际上并不需要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
    });
});