0

我正在开发一个网络游戏,一般来说:

我有一个服务器,它为连接到它的每个客户端启动一个 serverThread。
其目的是监听来自特定客户端的消息并在服务器上进行处理。
此外,对于打开的每个客户端,它都会启动一个 clientThread,它是来自服务器的消息的侦听线程。
这两个线程是非常简单且相似的线程,它们实现了 Runnable 接口,因此覆盖了 run 方法。
每个 Run 方法都是某种无限循环,在它的启动命令(阻塞命令):

int 命令 = m_In.readInt();

然后通过在接收到的命令上切换案例结构来执行一个过程。
处理完成后,循环导致代码返回阻塞 m_In.readInt()
以等待另一个命令的到来。

我的问题是:我的网络游戏有足够的选项使用这个 m_In 上的通信,所以如果有两条或更多条消息几乎一起到达 clientThread 会发生什么,dataInputStream 将如何行动?
它会开始处理第一条消息,并在完成后抓取第二条消息,它在某种队列上吗?或者它可能会丢弃第二条消息并且它会丢失?也许该流具有缓冲区,因此它将第二条消息存储在队列或其他东西中?

谢谢

4

1 回答 1

1

流本质上期望数据以指定的顺序出现。如果你有两个线程同时写入同一个流,就会发生不好的事情。

现在您当然可以同步对流的访问并让两个线程交错写入(只要您在流上构建某种格式,告诉接收器如何读取数据),但默认情况下您不会得到这个。

但是,通常情况下,每个客户端线程都有自己的连接,因此有自己的要写入的流。一个服务器显然可以“同时”从多个流中读取,这是正常的服务器模式。

于 2011-10-18T00:14:35.377 回答