Nodejs + net.js
Доброго времени суток.
Пытаюсь понять, как подключить 2 tcp клиента к серверу node.js, который крутится на raspberry pi. Использую модуль "net". Всё сделал по стандарту. В упрощённом виде это так: var ethernet_port = 7000; var net = require('net'); var server = net.createServer(ethernet_handler).listen(ethernet_port); function ethernet_handler (e_socket) { e_socket.on ('data', on_receive); e_socket.on('close', on_close); e_socket.on('timeout', on_timeout); e_socket.on('error', on_error); function on_receive (msg) { console.log ("Received data: ", msg); } function on_close () {} function on_timeout () {} function on_error () {} } Дело в том, что в моих принимаемых данных уже закодирован номер tcp клиента и различать мне их не надо. Но потом, после обработки входящих данных, мне нужно слать данные модулю обратно. Для этого существует метод: socket.write (data). Он работает внутри обработчика сокета. Можно получить к нему доступ через замыкание. Но самое главное, что объект socket всегда указывает на последнего подключённого клиента. Вопрос - как можно выбрать сокет (tcp клиента) в который шлём данные? Что-то мне подсказывает, что для каждого клиента надо создавать сокет с другим портом? |
Немного разобрался. Только не знаю, правильно ли так.
Вообщем, при создании нового сокета, когда создаётся объект e_socket - я проверяю адрес клиента. А потом по заранее заданным условиям делаю ссылки на эти объекты. Например, после создания e_socket: if (e_socket.remoteAddress == "192.168.1.10") client1 = e_socket; if (e_socket.remoteAddress == "192.168.1.11") client2 = e_socket; Когда хочу отправить данные клиенту, то подставляю в функцию отправки ссылку на объект-сокет и собственно сами данные. function tcp_send (client_name, data) { client_name.write (data); } tcp_send (client1, "Привет!"); Всё работает) Может покажется чутка мудрёно, но если разобраться, то чепуха. |
Часовой пояс GMT +3, время: 09:01. |