Node.js TCP Socket не пишет в соединение с модуля - PullRequest
0 голосов
/ 25 февраля 2019

У меня 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 не копирует значения объектов, он использует ссылки.

Но почему сообщения не отправляются другому клиенту?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...