2016-11-20 102 views
0

我是websockets的新手。如何在發送後在OPEN中保持websocket連接狀態?

在我的設置我已經寫在Go(playground

一個微不足道的WebSocket服務器我做一個WebSocket對象,建立了onmessage回調並調用其send方法進行測試。

var w = new WebSocket("ws://localhost:12345/echo") 

w.onmessage = (msg) => { 
    console.log(msg.data) 
} 

w.onopen =() => { 
    w.send("Hello") // this fires OK 
} 

我期望根據服務器代碼發生的事情是接收「Hello」消息並不斷向客戶端發送「yahoo」每1.5秒。實際發生的事情是發送了「你好」,但沒有一個「雅虎」通過。它似乎沿着WebSocket.readystate變成了3(CLOSED)。

爲了澄清,服務器接收和打印「Hello」,然後實際上每隔1.5秒觸發一次「雅虎」消息,但連接已關閉,因此onmessage回調不會觸發。

我是否遺漏或誤解任何東西?

編輯:跑遍comparison github.com/gorilla vs. golang.org/x/net,聲稱golang.org/x/net websocket實現不支持pong。這可能是對它的確認。

編輯:當處理程序ServeHTTP函數返回時,包golang.org/x/net/websocket關閉websocket連接。默認情況下,websocket連接綁定到處理程序的實例。

+0

我推薦你使用gorilla/websocket是Go中的最佳實現,看一看例子:https://github.com/gorilla/websocket/tree/master/examples –

回答

1

當處理函數返回,在你的情況EchoServer套接字將被http框架自動關閉。 由於您爲循環寫入yahoo響應的循環開始執行例程,所以EchoServer函數將在它有時間發送響應之前終止(並因此關閉套接字)。

解決的辦法是去除去程序的產卵,只是做EchoServer內的循環。

相關問題