【问题标题】:keeping a tcp socket open in node.js在 node.js 中保持 tcp 套接字打开
【发布时间】:2011-09-17 02:09:08
【问题描述】:

我正在打开一个到服务器的 tcp 连接,这很容易做到,但我需要一种方法来保持该套接字打开,而不必一次又一次地调用 net.createConnection(port, host)

我要实现的是一个套接字服务器,它接受多个连接,然后通过上面提到的一个套接字引导请求。然后我需要将响应引导到正确的套接字。但是,我遇到的唯一问题是维护一个我试图在侦听服务器代码之外创建的开放式套接字。

我已经使用单例模式来创建套接字。

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') 也会发生同样的事情。

我该如何解决这个问题,以便创建和维护一个套接字连接?

【问题讨论】:

  • 我不明白你在问什么。套接字是点对点连接。每个连接都必须有一个,并且数据永远不会混合。
  • 是的,这是正确的,但我要做的是让多个套接字连接到服务器,然后我需要将请求从每个套接字传递到另一个服务(但在这里我只能打开一个插座)。当我从服务获得响应时,我需要将其引导回正确的套接字。这是我需要将响应映射到正确套接字的地方!
  • 所以我列出了连接到我的服务的任何套接字,但我需要将每个请求引导到我需要与另一台服务器打开的一个套接字连接。这是我遇到的问题,保持与该服务器的连接打开。传入流量没有问题。如果您需要更多信息,请告诉我。感谢您的关注。
  • 所以我不想在每次收到来自传入套接字的请求时都创建一个到服务器的连接,如果可能的话。我的限制是我只能与我正在引导请求的服务器建立一个开放连接。
  • 我忽略了它 - 问题已解决..

标签: sockets node.js tcp


【解决方案1】:

对此的回应较晚。

如果我正确理解您的问题,您是否正在尝试做这样的事情?

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

根据net Node.js v.0.12.0 documentation

它可能会起作用,但它会严重影响服务器,所以setTimeout 可能是明智的。

我很好奇:你最后得到了什么?

【讨论】:

    【解决方案2】:

    听起来您希望在服务器前面有一个 mux/demux(多路复用器/解复用器),它可能会以前端可以正确路由回复的方式进行回复。

    TCP 中没有任何内容支持这一点,因此您必须自己编写或找到一个已经编写好的。 http://www.google.com/search?q=tcp+multiplexer

    这个链接看起来很有希望:http://sourceforge.net/projects/tcpmultiplexer/

    (不要将您要查找的内容与端口 #1 上的“tcpmux”混淆;这是完全不同的。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-11-23
      • 1970-01-01
      • 2014-05-28
      • 2013-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多