[英]Establishing WebSocket Connection within and for a JS API
目的:為了提供一個與服務器通信的簡單易用的JS庫,我試圖在API的開頭建立一個WebSocket連接,並在此后定義該庫的功能。
問題:問題是在加載庫和運行用戶腳本之前,我的套接字的ready狀態沒有轉換為1(就緒)。 對此進行調試已經確認了這一點,我不確定在繼續執行用戶腳本之前如何確保WebSocket已建立。
我有的:
(function(myObject) {
var socket = new WebSocket(url);
socket.emit = function() {
//do some tasks and create a var "message"
socket.send(message);
}
window.myObject = myObject.prototype = {
doSomething: function() {
socket.emit();
}
}
}(myObject = window.myObject || {}));
上面,我在套接字對象上定義了一個自定義方法(socket.emit()),該方法又調用socket.send()。 我這樣做是為了在通過socket.send()發送數據之前處理一些數據,重用了否則會重復的代碼。
然后,我有了一些非常基本的html,其中包括此JS庫,並且一個簡單的腳本運行如下:
$(document).ready(function() {
myObject.doSomething();
});
我得到的錯誤是:“無法在'Websocket'上執行'發送':已經處於CONNECTING狀態。”
庫成功加載,但Websocket在運行客戶端腳本之前未完成連接。 如何在API完成加載之前確保WebSocket已連接(readystate == 1)?
謝謝您的幫助!
只要套接字未連接,就可以將所有消息緩沖在socket.emit
,並在收到onOpen
回調后將其發送。
盡管這將解決您當前的問題,但您會看到新的問題:您可能希望處理與服務器的斷開連接並重新連接,因此,您可能無論如何都需要擴展庫API來公開連接狀態更改事件並強制庫用戶執行以下操作:僅在連接時發送消息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.