1

谈到每个连接的线程模型,每个连接都应该有一个线程。该线程用于从流中读取数据。但是,由于我使用的是阻塞 I/O,因此在尝试读取某些内容时我无法发送任何内容。

显然 Minecraft 每个连接使用两个线程,一个用于读取,一个用于写入。那是我也应该做的事情还是应该如何实施?

据我所知,发送数据也会阻塞,所以我不能只从tick线程发送,对吧?

所以再一次,我想知道的是:

  • 我应该为每个连接设置一个读写线程吗?如果没有,那我应该如何实现呢?

提前致谢。

4

1 回答 1

1

在一个简单的乒乓式网络对话框中,运行某种状态机的单个线程就足够了。

但是,如果需要异步发送和/或接收数据,而不是直接响应接收或发送的最后一条数据,则每个方向一个线程是明智的,并且无论如何都不是一个糟糕的解决方案。

Java 提供的非阻塞 IONIO有利于高性能、高吞吐量的应用程序,例如重负载的 Web 服务器等。在这些应用程序中,不希望每个连接有一个或两个线程,这可能总共有数千个线程在运行同时在服务器上。在客户端,使用非阻塞 IO 并没有什么好处,如果您不希望同时维护数百个连接,多线程是可行的方法。

于 2013-03-28T17:30:54.530 回答