【发布时间】:2011-04-18 19:45:45
【问题描述】:
我希望编写一个基于客户端-服务器的小型文本游戏,它可以处理多个客户端连接并持续影响游戏状态。我想知道处理多个连接的最佳方法是什么,以便命令按照到达服务器的顺序进行处理。
理想情况下,我不希望利用多线程,至少在命令处理级别。我可以让每个客户端都有一个单独的线程(以便在每个线程上都有阻塞 IO),只要我之后可以在单个线程中统一处理。
由于客户端和服务器之间的唯一通信将是文本,我不确定如何最好地设置通信。如果我选择阻塞 IO,我将如何让处理在单个线程中发生?
或者,如果我选择非阻塞 IO 并使用选择器来查询客户端何时写入服务器,如何在不使用设置大小的 ByteBuffer 的情况下读取未知/无限长度的字符串?非阻塞也有利于将处理保持在单个线程中,因为它可以在客户端连接发送新数据时读取它们。但是,当我尝试使用 read/writeUTF 实现它时,我遇到了 IllegalBlockingModeException 呵呵。
任何关于如何以我未提及的方式执行此操作的问题或建议的答案将不胜感激!我对客户端和服务器还很陌生,所以我不知道 java.io 还是 java.nio 最合适。
很抱歉这个令人费解的问题。我想我自己逃跑了。
【问题讨论】: