我正在用Java编写游戏服务器。在游戏服务器中很常见,我必须接收一个客户端收到的数据并将其分发到客户端的房间(其他客户端)。目前,每个客户端都会生成自己的线程并在其上工作。但是,我很难定义球员之间的关系。如何控制聊天等内容,哪些消息必须与同一房间内的所有其他玩家相呼应?我在考虑像消息队列这样的东西,所有线程都经常查找消息并将它们发送到自己的客户端。
我也愿意接受立即抛弃多线程的建议,但我不熟悉NIO,而且服务器已经使用普通Socket
和Thread
来编写。
摘要:如何让我的客户(在线程中)相互交谈?或者是否有更好的非线程替代方案?
答案 0 :(得分:1)
我使用的一种方法是设计一个Server类和一个扩展Thread的类。
Server类将生成所有线程,并保留它创建的所有当前运行线程的列表。
在Thread类中,使用Socket对象创建输入/输出流。当其中一个线程有话要说时,它将通过流与服务器通信,然后由服务器将该消息传递给所有当前正在运行的线程。
这个非常简单的java教程实际上帮了我很多。
https://docs.oracle.com/javase/tutorial/networking/sockets/readingWriting.html
答案 1 :(得分:1)
我提议的解决方案也类似于Jakeway。我已经以这种方式完全实现了相同的功能。
服务器将创建一个线程并在该线程中创建服务器套接字并等待连接
客户端将连接到服务器。服务器将创建ClinetSocket并将此套接字传递给线程。该线程负责从服务器
进行客户端/服务器通信形成客户端,在创建Socket时,将启动一个线程,该线程负责客户端的客户端/服务器通信
从下面的链接查看一些现成的代码。
关于优点&使用套接字时,请访问以下链接:rmi vs servlets vs sockets
关于客户之间的沟通?不可行。客户端将向服务器&发送消息。服务器应该向其他客户端发送消息。如果你看看雅虎的聊天情况
1)您将在聊天室中向服务器发送消息
2)服务器有客户订阅客户端到聊天室的列表
3)服务器将向订阅房间的所有客户发送消息
答案 2 :(得分:-1)
嘿,我为此制作了一个图书馆! https://www.dropbox.com/s/xcy1uyyyc610lb5/JSock.rar?dl=0 只需下载并将其导入您的项目即可。 阅读ReadMe.txt它将解释大部分内容。 如果你需要我解释更多,请问!