gpt4 book ai didi

javascript - 如何将数据发送到使用 net.createServer() 连接事件创建的特定套接字?

转载 作者:搜寻专家 更新时间:2023-11-01 00:30:44 26 4
gpt4 key购买 nike

当涉及到套接字时,我习惯于 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);
});

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

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

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

如有任何帮助,我们将不胜感激

Z

最佳答案

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

这里使用一个对象:

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com