【问题标题】:Handling Lots of Clients: UDP or TCP?处理大量客户端:UDP 还是 TCP?
【发布时间】:2014-08-02 06:22:39
【问题描述】:

我想创建一个所有客户端都可以连接的通信服务器。我遇到的唯一问题是决定是使用 TCP 还是 UDP。我希望能够一次处理数百个客户端(500 - 1000),每个客户端都有自己的线程来处理它们。 TCP 或 UDP 是否能够做到这一点,如果可以,哪一个适合我的需要?如果有人对处理大量客户的更好方法有任何想法,请告诉我。谢谢。

编辑:服务器基本上是一个消息通信服务器。因此,所有游戏服务器(客户端)都可以向它发送消息,并将其广播到所有其他游戏服务器(客户端)。我希望所有消息传递都尽可能可靠。

【问题讨论】:

  • 您要发送什么信息?你关心国家吗?您是否关心可能丢失一些数据包?
  • 由于您不关心性能(“每个人都有自己的线程来处理它们”),所以请使用您最了解的那个。

标签: java networking tcp udp


【解决方案1】:

TCP 和 UDP 都可以做到这一点。您使用哪一种取决于您是否需要不可靠的数据报或可靠的流。只有你知道,但几乎可以肯定你应该使用 TCP,

【讨论】:

    【解决方案2】:

    这里主要考虑三个方面。

    首先,您需要自己制作这样的服务器吗?有许多产品(大多数免费和开源)可以完成您所描述的工作:KafkaRedisZeroMQRabbitMQ,这只是开始。如果您想制作一些游戏或其他应用程序,那么就选择其中一个,然后花时间开发真正的应用程序。

    其次,您是否需要可靠的沟通渠道?如果是这样,您需要 TCP。如果没有,那么您需要 UDP。不要担心哪个更快。使用适合您需求的那一款。还有……如果你不能 110% 确定你需要 UDP,那么你肯定需要 TCP。

    最后,在尝试扩展入站网络连接时,最大的杠杆是同步 I/O 与异步 I/O。使用前者,您需要每个入站连接有一个线程/进程,并且您将快速耗尽您机器上的资源。使用后者,您可以使用单个线程处理几乎所有事情,并且可以扩展得更大。比较 Ruby on Rails 与 Node.js 之类的具体示例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-01
      • 1970-01-01
      • 2010-11-29
      • 2021-04-09
      • 1970-01-01
      • 2012-01-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多