对于套接字,我已经习惯了perl和POE编程,并且我正在考虑将node.js用于非基于Web的应用程序服务器。我从编写网页用户界面中获得了JavaScript知识。

我一直在使用net模块,并且已经能够成功地同时从多个客户端连接到该模块。

var net = require('net');
var port = 63146;
var socketNum = 0;

var adminServer = net.createServer(function(socket){
     //add connection count
     socketNum++;
     socket.nickname = "Con# " + socketNum;
     var clientName = socket.nickname;

     console.log(clientName + "connected from " + socket.remoteAddress);
     socket.write("You have been given the client name of " + clientName);
 });

adminServer.listen(port, function() {
    console.log("Server listening at" + port);
});

因此,我遇到的问题是,如果我创建了另一个功能,该功能需要将数据发送到特定的客户端,而不是向所有客户端广播,则我不知道该怎么做。

我已经在这里和Google进行了广泛的搜索。许多简单的tcp服务器和回显服务器到单个客户端的示例,但对于多个客户端则没有。

我正在尝试在没有socket.io的情况下执行此操作,因为并非所有客户端都将基于Web。

任何帮助,将不胜感激,

ž

最佳答案

您必须以某种方式自己存储它们,无论是简单地添加到数组还是添加到以某个唯一标识符为键的对象(例如)。

这里使用一个对象:

var net = require('net');
var port = 63146;
var socketNum = 0;
var sockets = Object.create(null);

var adminServer = net.createServer(function(socket){
     //add connection count
     socketNum++;
     socket.nickname = "Con# " + socketNum;
     var clientName = socket.nickname;

     sockets[clientName] = socket;
     socket.on('close', function() {
       delete sockets[clientName];
     });

     console.log(clientName + " connected from " + socket.remoteAddress);
     socket.write("You have been given the client name of " + clientName);
 });

adminServer.listen(port, function() {
    console.log("Server listening at" + port);
});

然后,您可以通过为其分配的昵称找到一个特定的套接字。

关于javascript - 如何将数据发送到使用net.createServer()连接事件创建的特定套接字?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35367897/

10-11 22:16
查看更多