首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Chat Server -每次轮询的持久TCP或新连接

Chat Server -每次轮询的持久TCP或新连接
EN

Stack Overflow用户
提问于 2010-09-29 01:32:17
回答 1查看 904关注 0票数 1

需要维护活动用户列表的可伸缩服务器的最佳实践是什么?

  • 应该为服务器发送更新消息的每个客户端打开一个持久的TCP连接吗?这可能导致许多开放的连接,并可能在许多秒内没有流量。这是tcp中的问题吗?
  • 还是让客户端轮询定期更新(每个连接都有新tcp连接)比较好?

聊天服务器或大型在线游戏如何处理这个问题?

EN

回答 1

Stack Overflow用户

发布于 2010-09-29 06:51:18

就我个人而言,我会选择每个客户端一个持久TCP连接,以避免( a)创建和销毁连接的额外工作以及所有涉及的TCP数据包所涉及的额外延迟;( b)避免在客户机或服务器上在TIME_WAIT中创建大量套接字。根本没有什么好的理由去创建和破坏这些连接。

根据您的平台,可能有不同的技巧来处理各种特定于平台的问题,当您打开大量连接时,您可能会遇到这些问题。例如,在Windows上,使用重叠的I/O和I/O完成端口对于很多连接来说都是一个很好的设计,如果您的连接大部分时间都处于空闲状态,那么您可能会发现,使用“零字节读取”技巧将允许您在较小的硬件上处理更多的连接;但是,一旦您知道由于等待读取的缓冲区空间太大而导致问题,这是可以添加的。

我不会让客户在服务器上轮询。效率很低。让服务器在有可用数据时将数据发布到客户端。这将允许服务器在某种程度上控制工作负载,方法是让它决定将数据发送到客户端的频率--它可以在每次为客户端提供新数据时发送数据,或者在将一些数据批量处理并等待一段时间之后发送,等等。如果服务器正在推送数据,那么服务器(可能会被客户需求淹没的地方)对它需要做的工作有更多的控制权。

如果您有每个客户端轮询,那么就会产生更多的网络噪音,因为每个客户端都会发送一条消息,询问服务器是否有它应该发送的内容;( b)您正在为服务器生成更多的工作,因为它需要响应投票。服务器知道什么时候有客户端的数据,让它负责告诉客户端。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3818189

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档