想象一下真空中的一些球形马: 我失去了对客户端应用程序的控制,可能发生了一些错误。我试图立即重新进入枢纽。 是否可能,OnConnected启动速度更快,然后OnDisconnected,我在服务器上出现两次?
编辑:
对不起,我没有说我的意思是SignalR库。我想如果我的应用程序不会调用stop(),服务器将默认等待大约30秒。在调用OnDisconnected之前,我可以再次连接到服务器。不是吗?
答案 0 :(得分:2)
您必须从客户端获取它,还要注意,如果您使用TCP,则会发生以下情况:
TCP确保您的数据包按照发送顺序到达。所以让我们想象一下,在同一时刻,“马”撞到了空间并且连接断了,你的服务器正在发送下一个检查连接的数据包(如果你实现的服务器足够好)。
在这里,可能会发生两件事:
OnDisconnected
事件。如果客户端在服务器注意到的同时虚拟恢复,那么它将启动另一个连接(OnConnected)。 所以客户端不可能再转两次。如果有的话 断开间隔将足够小,服务器不能 首先注意问题。
同样,另一个协议可能表现不同。但TCP旨在保证服务器和客户端之间建立良好的连接和通信。
值得一提的是,默认情况下,许多通信框架(如果不是全部)都隐式使用TCP。
答案 1 :(得分:1)
客户端可以在第一个连接打开时第二次连接(但它将具有单独的连接ID)。
如果客户端未设法通知服务器它正在关闭连接,则服务器将等待一段时间后再删除连接(DisconnectTimeout)。 因此,在这种情况下,如果您立即重新启动连接,它将成为具有新连接ID的服务器的新逻辑连接。
SignalR还会在丢失时尝试重新连接到现有连接,在这种情况下,重新连接后它将保留其连接ID。我建议您阅读整个article about SignalR connection lifetime events。