我正在开发一款网络游戏,总的来说:
我有一个服务器,它为每个连接到它的客户端启动一个serverThread。
它的目的是监听来自特定客户端的消息,并在服务器上对其进行处理。对于打开的每个客户端,它启动一个clientThread,这是一个侦听来自服务器的消息的线程。
这两个线程是非常简单和相似的线程,它们实现了Runnable接口,因此覆盖了run方法。每个Run方法都是某种无限循环,在其开始处有以下命令(阻塞命令):
int command = m_In.readInt();
,然后在接收到的命令上通过切换案例结构进行处理。
处理完成后,循环导致代码返回到阻塞m_In.readInt()
等待:等待另一个命令的到来
我的问题是:我的网络游戏有足够的选项使用通信在这个m_In,所以如果有两个消息或更多的来几乎一起到clientThread,会发生什么,dataInputStream将如何行动?
它是否开始处理第一条消息,并在它完成后抓取在某种队列上的第二条消息?或者它可能丢掉第二条信息,然后就丢失了?也许这个流有缓冲区,所以它将第二条消息存储在队列或其他东西中?
谢谢
流本质上希望数据以指定的顺序出现。如果你有两个线程同时写同一个流,不好的事情就会发生。
现在你当然可以同步访问流,并让两个线程交错写入(只要你在流上建立某种格式,告诉接收者如何读取数据),但默认情况下你不会这样做。
通常情况下,每个客户端线程都有自己的连接,因此有自己的写入流。显然,服务器可以同时从多个流中读取数据,这是正常的服务器模式。