2011-06-17 53 views
1

我打开一个TCP连接,这是很容易做到的服务器开放的,但我需要一种方法来保持这种插座开放,而不必一次次给net.createConnection(port, host)保持TCP套接字的node.js

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

我受够了Singleton模式,以创建套接字走近它..

var Singleton = (function() { 

     var socket = null; 

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

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

但是,从我所看到的,在事件(“结束”),该插座不再是可写的。如果我重新连接插座。

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

Event('end')会发生同样的事情。

我怎样才能接近,这样我可以创建和维护一个套接字连接?

+0

我不明白你在问什么。套接字是点对点连接。每个连接必须有一个,并且数据不会混合。 –

+0

是的,这是正确的,但我想要做的是有多个套接字连接到服务器,然后我需要从每个套接字通道请求到另一个服务(但在这里,我只能有一个套接字打开)。当我得到服务的响应时,我需要将其返回到正确的套接字。这是我需要将响应映射到正确的套接字的地方! – vitez

+0

所以我列出了连接到我的服务的任何套接字,但我需要将每个请求传递给一个套接字连接,我需要使用另一个服务器打开它。这是我遇到的问题,保持与服务器的一个连接打开。传入流量不成问题。 让我知道,如果你需要更多的信息。 感谢您的关注。 – vitez

回答

0

这听起来像你想在你的服务器前面的MUX/DEMUX(复用器/解复用器),其中,据推测,在回答这样的前端能够正确路线的答复。

没有什么在TCP支持这个,所以你必须自己编写或找到已经写好一个。 http://www.google.com/search?q=tcp+multiplexer

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

(不要混淆你要找的内容与端口#1“tcpmux”,这是完全不同的。)

1

逾期反应了这一点。

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

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

Accroding到net Node.js v.0.12.0 documentation

它可能会奏效,但它会捶服务器相当严重,所以setTimeout也许是明智的。

我很好奇你最终结束了什么?