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