谈到每个连接的线程模型,每个连接都应该有一个线程。该线程用于从流中读取数据。但是,由于我使用的是阻塞 I/O,因此在尝试读取某些内容时我无法发送任何内容。
显然 Minecraft 每个连接使用两个线程,一个用于读取,一个用于写入。那是我也应该做的事情还是应该如何实施?
据我所知,发送数据也会阻塞,所以我不能只从tick线程发送,对吧?
所以再一次,我想知道的是:
- 我应该为每个连接设置一个读写线程吗?如果没有,那我应该如何实现呢?
提前致谢。
谈到每个连接的线程模型,每个连接都应该有一个线程。该线程用于从流中读取数据。但是,由于我使用的是阻塞 I/O,因此在尝试读取某些内容时我无法发送任何内容。
显然 Minecraft 每个连接使用两个线程,一个用于读取,一个用于写入。那是我也应该做的事情还是应该如何实施?
据我所知,发送数据也会阻塞,所以我不能只从tick线程发送,对吧?
所以再一次,我想知道的是:
提前致谢。
在一个简单的乒乓式网络对话框中,运行某种状态机的单个线程就足够了。
但是,如果需要异步发送和/或接收数据,而不是直接响应接收或发送的最后一条数据,则每个方向一个线程是明智的,并且无论如何都不是一个糟糕的解决方案。
Java 提供的非阻塞 IONIO
有利于高性能、高吞吐量的应用程序,例如重负载的 Web 服务器等。在这些应用程序中,不希望每个连接有一个或两个线程,这可能总共有数千个线程在运行同时在服务器上。在客户端,使用非阻塞 IO 并没有什么好处,如果您不希望同时维护数百个连接,多线程是可行的方法。