作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我目前正在学习如何用 java 编写 TCP 服务器程序。我正在为新的每个客户端连接(多线程服务器)创建一个新线程。
客户端连接到服务器后,我想从客户端向服务器发送数据。在服务器端,服务器处于 while 循环中,从套接字输入流中读取数据。我现在想问:我是否应该为每个收到的数据包创建一个新线程?
例如,客户端发送字符串“Hello”。服务器是否应该在新线程中处理此数据包以便它可以继续读取,因为我认为如果我不创建新线程,服务器不会返回读取并且如果客户端在“Hello”数据包之后发送另一个数据包例如“Bye”,服务器可能不会读取它,因为它可能仍在忙于处理“Hello”数据包。
需要明确的是,我不是在谈论服务器套接字接受方法,而是在谈论来自套接字输入流的数据。
请赐教。
最佳答案
如果您的数据包处理任务不是很重(可能不是),您不应该这样做。线程将处理消息并返回接收新消息。没有数据会丢失——如果没有人从输入流中读取数据,数据传输就保持不变(在所有缓冲区都填满之后)。只需为每个客户端保留一个线程,在大多数情况下就足够了。
关于Java 服务器 : start a new thread for each received packet?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12017575/
我是一名优秀的程序员,十分优秀!