我只是让我的服务器断开套接字,在一定时间后发送没有数据,比如20秒.
我想知道使用定时器是否适合那个或者套接字库中有什么特别之处吗?在服务器上使用每个套接字的定时器会使它变得很重.
使客户端程序处理它是不安全的吗?例如,每个客户端在一段时间不发送数据后断开连接.
作为保持活动检查的一部分,这应该很容易实现。除非您完全忽略连接断开的问题,否则您可能有一个保持活动状态的系统,该系统会定期向客户端->服务器发送消息,如果没有通信,则反之亦然。将一个简单的“上次数据接收时间”值添加到套接字状态应该很简单,如果它离 太远,则关闭套接字DateTime.Now。
但更重要的问题是“为什么?”。最好的解决方案首先取决于您这样做的原因。您是否想通过转储那些不发送数据的客户端来使服务器可供更多客户端使用?你可能会让一切变得更糟,因为 TCP 套接字的超时时间更像是 2-4 分钟,所以当你在 20 秒后断开客户端连接并重新连接时,它现在将使用两个服务器端端口,而不是一个。哎呀。
至于您对已删除答案的评论,and connection without data send and receive i think it gonna waste your threads更接近您的实际问题 - 您的服务器拥有的连接量应该与服务器用于服务这些连接的线程数量无关。因此,打开的连接唯一会“浪费”的基本上就是一点内存(取决于每个连接所需的内存量,加上套接字及其缓冲区的成本)和 TCP 端口。这在某些应用程序中可能是一个问题,但如果您达到了这种“负载”级别,您可能已经可以祝贺自己了。在接近端口限制之前,您更有可能耗尽其他资源(假设基于听起来您正在制作 MMO 游戏)。如果您确实遇到了这些问题,您可能无论如何都想放弃 TCP 并用 UDP 重写所有内容(或者最好是在 UDP 之上使用一些现成的解决方案)。
| 归档时间: |
|
| 查看次数: |
1175 次 |
| 最近记录: |