我使用websocket客户端的python和java实现。但是,由于onMessage是异步的,即使正在执行另一个函数,它也会立即开始执行。我如何确保在处理下一条消息之前每个onMessage函数将完全完成。谢谢!Websocket onMessage Lock
编辑: 我订阅了多个频道,无论哪个频道发送消息,我的onMessage处理程序将处理该消息。我需要我的onMessage处理程序在它开始处理下一条消息之前全面处理它收到的每条消息,但我不能丢失任何消息。我希望这有助于澄清一点。
我使用websocket客户端的python和java实现。但是,由于onMessage是异步的,即使正在执行另一个函数,它也会立即开始执行。我如何确保在处理下一条消息之前每个onMessage函数将完全完成。谢谢!Websocket onMessage Lock
编辑: 我订阅了多个频道,无论哪个频道发送消息,我的onMessage处理程序将处理该消息。我需要我的onMessage处理程序在它开始处理下一条消息之前全面处理它收到的每条消息,但我不能丢失任何消息。我希望这有助于澄清一点。
这听起来只是一个并发问题。这个怎么样?
private final Object onMessageLock = new Object();
@OnMessage
public void onMessage(String message, Session session)
{
synchronized (onMessageLock)
{
// Handle the message here.
}
}
我测试了Takahiko提出的解决方案。它只能基于一个客户端运行。来自不同客户端的消息仍然会并行处理。
如果你想之前已经完全处理的消息后(无论发送邮件的客户端),你必须做出锁定对象的静态待处理的所有消息:如果你正在使用`的javax
private static final Object onMessageLock = new Object();
会试试这个,谢谢! – holtc
.websocket','session.getBasicRemote()。sendText(message,isLast);'按照[link](https://tyrus.java.net/documentation/1.12/index/lifecycle.html# d0e1022)和[this](https://blogs.oracle.com/PavelBucek/entry/is_websocket_session_really_thread) – kakajan
发送消息不是问题,它正在接收我需要同步的消息。所以如果我连续得到2条消息,在消息2开始处理之前需要完全处理消息1,如果这有意义的话 – holtc