2013-03-10 121 views
1

我在写一个TCP客户端和服务器应用程序。 服务器获取请求并在单独的线程中为每个客户端打开一个套接字。 客户端可能会注册事件,服务器应该在事件发生后将事件发送给客户端。 我的问题是,保存套接字并在请求的同一个开放套接字上发送事件是一个好习惯。即如果没有消息发送,那么在一段时间后套接字会关闭?是否需要keepAlives?有没有其他情况会导致客户端连接时断开连接。 为每个事件创建一个新套接字的开销是多少 - 服务器发送的每封邮件都是什么?TCP服务器和客户端C#最佳实践

+0

我会建议保持它活着。我记得读过一篇文章说如果你保持TCP连接活着,它最终会变得更快。只要确保你不断地通过套接字发送一些东西,以确保它能保持活力。 – 2013-03-10 10:20:43

回答

0

您可以进行活动连接,并且不需要在服务器和客户端之间使用活动数据包进行TCP连接。如果连接断开,双方都会。

如果我理解正确,您可以轻松地检查连接是否丢失在数据包接收功能中。如果断开连接,只需导入重新连接的功能即可。

但是,如果在服务器发布新的“事件”并在此之后重新连接之前断开连接,则客户端无法收到此数据包。

如果越过这个问题,试试这个:

  1. 保存您的事件清单。
  2. 为每个事件添加timestamp属性。
  3. 确保客户端可以记住它收到的最后一个 事件的时间戳记值。
  4. 使客户端发送包含重新连接后丢失事件的最后一个事件的时间戳值的请求。
  5. 如果服务器收到此请求,则使其发送请求数据包中的时间戳大于LastTimeStamp参数的事件。