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