我使用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