我有一个多进程TCPServer,它根据客户端的请求创建(通过fork()在linux上)一个进程(子进程),同时它正在监听其他连接的请求。所以我在客户端和服务器之间有一对一的映射。 假设一个客户端崩溃...是否可以将它重新连接到同一个子服务器进程?换句话说......可以恢复失败的预先连接或尝试重新连接创建新连接(和那么一个新的子服务器进程)?谢谢......
答案 0 :(得分:2)
如果没有(通过forker)内部会话相关细节(forkee)的一些知识,你必须假设外部细节足以确定哪些远程连接与哪个本地连接端点重新关联
但是,您可以更改应用程序中的工作方式。 Oracle SQL * Net在某些平台上执行此操作(由于平台限制)。
与TCPServer的初始连接导致fork and then opens up a new listening socket
,发送回重定向指令以连接到新的侦听套接字&识别细节(避免其他人连接和模仿原始连接器)。然后客户端连接到新套接字,并在断开连接之前使用此套接字进行任何重新连接。
答案 1 :(得分:0)
我在.NET平台上做过非常类似的事情。如果你有一些对每个连接都是唯一的东西(例如连接设备的IMEI可以这样做)。你应该有一个全局二维数组变量,结合了ProcessID和IMEI。因此,当设备断开连接然后设备重新连接时,您只能在此阵列中搜索此IMEI,并且您拥有此设备的进程。你应该非常小心这个全局变量。
编辑: 我给出了一些唯一标识符的示例。在我的情况下,这是设备的IMEI。在你的情况下,你可能知道它是独一无二的。 我不得不这样做,因为设备断开连接时遇到了很大的问题。每个新设备都是新连接,所以之后我的CPU使用率非常高。