onMessage Lock

时间:2015-10-06 21:04:25

标签: java python websocket

我正在使用websocket客户端的python和java实现。但是,由于onMessage是异步的,它将立即开始执行,即使正在执行另一个函数。如何在处理下一条消息之前确保每个onMessage函数完全完成。谢谢!

编辑: 我正在订阅多个频道,无论哪个频道发送消息,我的onMessage处理程序都会处理该消息。我需要我的onMessage处理程序在它开始处理下一条消息之前完全处理它收到的每条消息,但我不能丢失任何消息。我希望这有助于澄清一点。

2 个答案:

答案 0 :(得分:0)

这听起来只是一个并发问题。怎么样?

private final Object onMessageLock = new Object();

@OnMessage
public void onMessage(String message, Session session)
{
    synchronized (onMessageLock)
    {
        // Handle the message here.
    }
}

答案 1 :(得分:0)

我测试了Takahiko提出的解决方案。它仅适用于一个客户端。来自不同客户的消息仍将被并行处理。

如果您希望在完成处理之前的消息之后处理所有消息(无论发送它的客户端如何),您必须使Lock对象保持静态:

private static final Object onMessageLock = new Object();