Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sockets 在node.js中保持tcp套接字打开_Sockets_Node.js_Tcp - Fatal编程技术网

Sockets 在node.js中保持tcp套接字打开

Sockets 在node.js中保持tcp套接字打开,sockets,node.js,tcp,Sockets,Node.js,Tcp,我正在打开一个到服务器的tcp连接,这很容易做到,但我需要一种方法来保持套接字打开,而不必反复调用net.createConnection(端口、主机) 我试图实现的是一个套接字服务器,它接受多个连接,然后通过上面提到的一个套接字传递请求。然后我需要将响应传递到正确的套接字。然而,我遇到的唯一问题是维护一个打开的套接字,我正试图在侦听服务器代码之外创建它 我用Singleton模式来创建套接字 var Singleton=(函数(){ var-socket=null; 函数connectToHo

我正在打开一个到服务器的tcp连接,这很容易做到,但我需要一种方法来保持套接字打开,而不必反复调用
net.createConnection(端口、主机)

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

我用Singleton模式来创建套接字

var Singleton=(函数(){
var-socket=null;
函数connectToHost(端口,主机){
套接字=net.createConnection(端口、主机);
返回插座;
}
返回{
connectToHost:connectToHost
};
})();
但从我所看到的,在事件('end')上,套接字不再是可写的。如果我重新连接插座

socket.on('end',function(){
socket=Singleton.connectToHost(端口,主机);
});
同样的事情也会发生在事件(“结束”)上


我如何才能做到这一点,以便创建和维护一个套接字连接?

听起来您需要在服务器前面安装一个多路复用器/解复用器(multiplexer/demultiplexer),它可以以前端可以正确路由应答的方式进行应答

TCP中没有支持这一点的内容,所以您必须自己编写,或者找到一个已经编写好的

这个链接看起来很有希望:


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

对此的反应很晚

如果我没弄错你的问题,你是想做这样的事吗

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

它可能会工作,但会严重影响服务器,因此
setTimeout
可能是明智之举


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

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