Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 26.09.2015, 12:41
Новичок на форуме
Отправить личное сообщение для Yoda49 Посмотреть профиль Найти все сообщения от Yoda49
 
Регистрация: 26.09.2015
Сообщений: 4

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 клиента) в который шлём данные? Что-то мне подсказывает, что для каждого клиента надо создавать сокет с другим портом?

Последний раз редактировалось Yoda49, 26.09.2015 в 12:50.
Ответить с цитированием
  #2 (permalink)  
Старый 26.09.2015, 13:49
Новичок на форуме
Отправить личное сообщение для Yoda49 Посмотреть профиль Найти все сообщения от Yoda49
 
Регистрация: 26.09.2015
Сообщений: 4

Немного разобрался. Только не знаю, правильно ли так.

Вообщем, при создании нового сокета, когда создаётся объект 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, "Привет!");


Всё работает) Может покажется чутка мудрёно, но если разобраться, то чепуха.

Последний раз редактировалось Yoda49, 26.09.2015 в 14:00.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
WebSocket - nodejs SVARAI AJAX и COMET 2 17.02.2014 08:41
Nodejs. Массив или файл? Dorian_bs Общие вопросы Javascript 4 16.07.2013 13:56
немного об nodejs qwermjk AJAX и COMET 5 15.02.2013 10:57
Nodejs и sqlite Octane Серверные языки и технологии 16 21.10.2012 23:18
Comet: NodeJS - с чего начать разработку? Vulkan AJAX и COMET 13 27.11.2010 19:25