我有一个连接了多个客户端的TCP服务器。具有所有连接的数组存储在不同的模块中。像这样:
// connections.js
let connections = [];
module.exports.addConnection = (connection) => {connections.push(connection);}
module.exports.getConnectionByID = (ID) => {
for(const connection of connections) {if (connection.id == ID) return connection;}
}
// app.js
const connections = require(./connections.js);
const net = require('net');
const server = net.createServer();
server.listen(9000, () => {});
// Connection -----------------
server.on('connection', (connection) => {
connection.id = getSomeRandomID();
connections.addConnection(connection);
connection.on('data', (buffer) => {
const messageTo = connections.getConnectionByID(data.messageTo);
messageTo.write(data.message);
});
});
为了清楚起见,删除了一些代码。
顺便说一下, getConnectionByID
返回有效的Socket对象,因此那里没有问题。
connection.write
返回true
。
这里的问题是消息无法发送。但是,如果我使用connection
变量向当前连接发送消息,则该消息将成功消失。我的猜测是getConnectionByID
返回的是真实连接的副本,而不是引用。但是据我所知,JS不会复制对象值,而是使用引用。
但是为什么不能将messange发送给其他客户端?