是否socket.io忽略\放下它們? 我問這個問題的原因如下。 有幾個州的客戶。每個狀態都有自己的一組套接字處理程序。在不同的時刻,服務器通知客戶端狀態變化,然後發送幾個與狀態相關的消息。 但是!客戶需要一些時間來改變狀態並設置新的處理程序。在這種情況下,客戶端可能會錯過一些消息......因爲目前沒有處理程序。 如果我理解正確,客戶端會丟失未處理的消息。未處理的socket.io事件會發生什麼?
可能是我錯過了這個概念或做錯了什麼...如何解決這個問題?
是否socket.io忽略\放下它們? 我問這個問題的原因如下。 有幾個州的客戶。每個狀態都有自己的一組套接字處理程序。在不同的時刻,服務器通知客戶端狀態變化,然後發送幾個與狀態相關的消息。 但是!客戶需要一些時間來改變狀態並設置新的處理程序。在這種情況下,客戶端可能會錯過一些消息......因爲目前沒有處理程序。 如果我理解正確,客戶端會丟失未處理的消息。未處理的socket.io事件會發生什麼?
可能是我錯過了這個概念或做錯了什麼...如何解決這個問題?
我不確定socket.io,但JavaScript是單線程的。如果觸發event A
並且有該事件的偵聽器,則該偵聽器將阻止事件循環。第二個事件(我們稱之爲event B
)在該偵聽器結束運行之前不能被觸發。因此,如果您在偵聽器中直接設置事件處理程序event A
,則沒有競爭條件。
未處理的消息被忽略。就像事件發生時那樣,並且沒有該事件的事件監聽器。套接字收到消息,並沒有找到它的處理程序,所以沒有任何反應。
通過始終安裝處理程序,然後決定處理程序(基於其他狀態)是否對消息執行任何操作,可以避免丟失消息。