簡體   English   中英

在JS API中並為JS API建立WebSocket連接

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM