一、断线重连

使用断线重连非常简单,仅一行代码完成。using TouchSocket.Core.Plugins;
注意:断线重连,必须在完成第一次连接后,才会生效,而且,如果是主动断开的话,也不会生效。

  1. .UsePlugin()
  2. .ConfigurePlugins(a=>
  3. {
  4. a.UseReconnection(5, true, 1000);
  5. });

如需永远尝试连接,tryCount设置为-1即可。

二、服务器重置ID

每个客户端在连接时,服务器都会使用雪花算法,为连接的客户端新分配一个唯一ID,不管是新连接,还时重连来的。

ID策略是可以自由定义的,在Config配置中,自己定义新ID来源即可。要求,不和现连接的客户端ID重复。

但是,这种规范,是与客户端没有联系的,这也就意味着,这种方式是无法设置与SocketClient信息相关的ID的。

  1. .SetGetDefaultNewID(()=> { return new Guid().ToString(); })

但往往,有时候,我们希望,SocketClient的ID,能一定程度的代表一些信息。例如:以客户端的IP和端口,作为唯一ID。

那这时候,服务器可以订阅Connecting事件,然后,为新连接的SocketClient,设置与之有关联信息的ID。

  1. m_service.Connecting += (client, e) =>
  2. {
  3. e.ID = $"{client.IP}:{client.Port}";
  4. };//有客户端正在连接

但这样,应该还不足以应对所有情况。因为,有时候我们希望,在该连接完成某种验证之后复用之前的ID,以应对情况,那这时候,可以使用TcpService,或者SocketClient的ResetID的方法,来实现需求。