gpt4 book ai didi

java - 为什么 UDP 服务器不需要多线程来同时服务多个客户端?

转载 作者:行者123 更新时间:2023-12-01 10:49:46 26 4
gpt4 key购买 nike

TCP 服务器(使用 java.io 包)应该是多线程的,以便它可以同时支持多个客户端。然而,UDP 服务器不需要多线程来同时服务多个客户端。谁能解释为什么会这样?

最佳答案

(java.io) TCP 服务器需要是多线程的,因为与每个客户端的通信都是通过 io 流进行的。每次读/写消息时,每个流的通信都会阻塞。

UDP 服务器不通过 io 流进行通信。它通过来自同一 channel 上的所有客户端的单个数据报直接进行通信。

假设您的服务器有 10 个客户端,并且它等待其中任何一个发送。

  • TCP 需要 10 个线程,每个线程调用 InputStream#read() 方法并且全部阻塞。在某个时刻 1 将被唤醒。 “消息”不需要包含发件人地址,因为拥有流/连接就暗示了这一点。

  • UDP 需要 1 个调用 DatagramSocket#receive() 方法的线程。该数据包将包含发送者地址,以便第 1 个线程可以决定要做什么。

关于java - 为什么 UDP 服务器不需要多线程来同时服务多个客户端?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33984719/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com