оставляя tcp-сокет открытым в node.js - PullRequest
1 голос
/ 17 июня 2011

Я открываю tcp-соединение с сервером, что достаточно легко сделать, но мне нужен способ сохранить этот сокет открытым без необходимости повторного вызова net.createConnection(port, host).

Я пытаюсь реализовать сервер сокетов, который принимает несколько соединений, а затем направляет запросы через один сокет, как упомянуто выше. Затем мне нужно направить ответ на правильный сокет. Однако единственная проблема, с которой я сталкиваюсь, - это поддерживать открытый сокет, который я пытаюсь создать вне кода прослушивающего сервера.

Я подошел к нему с шаблоном Singleton, чтобы создать сокет.

var Singleton = (function() {

      var socket = null;

      function connectToHost(port, host) {
          socket = net.createConnection(port, host);
          return socket;
      }

      return {
          connectToHost: connectToHost
      };
})();

Но из того, что я вижу, в Event ('end') этот сокет больше не доступен для записи. Если я снова подключу сокет.

socket.on('end', function() { 
     socket = Singleton.connectToHost(port, host);
});

то же самое произойдет и в Event ('end').

Как я могу подойти к этому, чтобы я мог создать и поддерживать одно сокетное соединение?

Ответы [ 2 ]

1 голос
/ 05 марта 2015

Поздний ответ на это.

Если я правильно понимаю ваш вопрос, вы пытаетесь сделать что-то подобное?

socket.on('close', function() {
    socket.connect(port, host);
});

Согласно документации net Node.js v.0.12.0

Это может сработать, но это сильно ударит по серверу, поэтому setTimeout может быть мудрым.

Мне любопытно: что вы в итоге получили?

0 голосов
/ 27 июня 2011

Звучит так, будто вам нужен мультиплексор / демультиплексор (mux / demux) перед вашим сервером, который, по-видимому, отвечает так, как интерфейс может правильно направить ответ.

В TCP ничего нетчтобы поддержать это, вам придется написать это самостоятельно или найти уже написанное.http://www.google.com/search?q=tcp+multiplexer

Эта ссылка выглядит многообещающе: http://sourceforge.net/projects/tcpmultiplexer/

(Не путайте то, что вы ищете, с "tcpmux" на порту № 1; это совершенно другое.)

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