【发布时间】:2015-05-08 21:43:01
【问题描述】:
这里有点“菜鸟”问题。
我有一个小应用程序要编写(比如一个简单的游戏)。有服务器端和客户端。它必须使用 websockets 作为通信方式。服务器有一个服务器类(使用 main() 启动服务器)以及服务器端点类。但是,游戏不是回合制的,而是实时的。因此,服务器必须在动态字段的每个“tick”b/c 中进行某些计算。 我认为 Threads 在这种情况下会很适合,但我不知道如何将线程放在这种服务器上。
正如我所见,唯一可以接收/发送消息的是端点。如果我让它实现 Runnable 并每 0.5 秒暂停一次,它在暂停时间内不会接受消息。如果我为此目的定义一个不同的类,我不知道如何在端点内部启动它并为它们提供通信方式。 有没有人有任何建议/信息/链接/任何可能有帮助的东西?
提前谢谢你。
【问题讨论】:
-
无法暂停对象。线程可以。仅仅因为一个线程在 someObject.foo() 中休眠并不意味着其他线程不能调用 someObject 的任何方法。所以我不明白为什么端点在后台线程休眠时不接受消息。
-
所以类似:class ServEndPoint implements Runnable { @OnMessage public void onMessage(Session peer, Message msg) throws EncodeException { //do smth} public void run() { if(smth) {this .sleep(x);} } } 不会为 x 暂停整个事情吗? (很遗憾,我不知道如何在 cmets 中换行以提高可读性)
-
没有。那不会编译。如果您使用 Thread.sleep() 而不是 this.sleep() 来编译它,那么正如 javadoc 解释的那样,这将使 当前线程 休眠 x 毫秒。阅读并发教程,因为您缺少基本的多线程概念。
-
在这种情况下,我不明白 websockets 是如何工作的,以及如何使它们与至少一个独立的线程一起工作。
标签: java multithreading websocket endpoint