Node.js TCP套接字未写入模块的连接

时间:2019-02-25 15:32:04

标签: javascript node.js sockets tcp server

我有一个连接了多个客户端的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发送给其他客户端?

0 个答案:

没有答案