2012-08-13 62 views
2

WebSockets如何正確工作?實現它們似乎很奇怪。它的WebSockets和異步/同步部分

首先你用構造對象的地址,然後你定義瞭如連接打開時調用onopen這樣的回調函數。現在,如果我在構建它時告訴websocket連接,會發生什麼?如果構造函數以異步方式連接,是否保證我的onopen將被調用。

概括起來:

1)什麼時候決定的WebSocket連接,當我宣佈所有的回調?

2)是send()方法異步?如果是這樣,有沒有辦法將其稱爲同步?

編輯:我發現send()是異步,有一個bufferedAmount屬性返回經緩衝要發送的數據的量。然而,第二個問題的第二部分仍然存在。

回答

2

我已經找到了一個很好的方法來解釋事件循環,這部分的工作原理是這樣的:

在一個事件循環,一切異步運行,除非你的代碼。

在下一個事件循環迭代發生之前,將始終執行連續的語句。這意味着您可以安全地將事件偵聽器分配給ws對象,因爲您知道在當前迭代完成之前無法調用它們。

至於發送,正如你注意到的那樣,這些值通常是緩衝的。但是,在啓動onopen事件之前發送任何消息可能是一個糟糕的主意,因爲您在尚未打開的連接上緩衝消息。

我希望這能回答你的問題。

+0

這幾乎清除了一切。我看到WS代碼鏈應該以綁定到'onopen'的函數開始。 – Etherealone 2012-08-13 22:02:24

+0

是的,這正是我的意思。 :) – igorw 2012-08-13 22:12:29