這實在是一個更抽象的問題。我如何確定我不會錯過WebSocket的公開活動?據我瞭解,一旦我調用構造函數,瀏覽器就開始建立連接,所以如果事情變得糟糕,在連接這些事件的處理程序之前可能會觸發打開(或錯誤)事件。我如何確定我不會錯過WebSockets上的「open」事件?
var socket = new WebSocket("ws://www.example.com");
/*Because I'm an unlucky guy, the open-event fires before the next line*/
socket.addEventListener("open", function(event){...});
在這種情況下,我的open-Handler永遠不會被調用。這很可能永遠不會是一個真正的問題,因爲建立連接比執行下一行JavaScript需要更長的時間。然而,同樣可以說對XMLHttpRequest的,有事情的推薦順序是:
var ajax = new XMLHttpRequest();
ajax.addEventListener("load", function(event){...});
ajax.open();
ajax.send();
這將確保該事件不會丟失。爲什麼WebSocket在這方面有所不同?我是否忽略了某些事物並忽略了事件並不是一個真正的問題?
謝謝你對此的一些澄清。
謝謝,這就是我正在尋找的答案!我知道我忽略了一些東西,但我無法指責它。我從來沒有想過,多線程的缺乏會使整個事情成爲一個無關緊要的問題。 – user2295759
奇怪的是,在那個小提琴中,我從來沒有得到一個「打開」警報:( –
@CiprianTomoiaga什麼瀏覽器?在你的控制檯中,你是否看到任何網絡錯誤無法到達'echo.websocket.org'?它仍然適用於我在Chrome中。 – apsillers