簡體   English   中英

WebSocket 在發送時關閉

[英]WebSocket closes on send

所以我看到了這篇很棒的博客文章, 用 Node.js 做實驗 我決定嘗試使用作者的gist自己設置它。 它沒有用。

進一步的調試顯示 websocket 連接正常,但在調用“發送”后立即關閉。 這是wireshark跟蹤(原諒奇怪的間距):

GET /test HTTP/1.1

Host: 127.0.0.1:8000

Sec-WebSocket-Key2: 3   j 92 9   62" 7 0 8 8

Upgrade: WebSocket

Connection: Upgrade

Origin: http://127.0.0.1:3000

Sec-WebSocket-Key1: 96'5% S72.93?06



......(bHTTP/1.1 101 WebSocket Protocol Handshake

Upgrade: WebSocket

Connection: Upgrade

Sec-WebSocket-Origin: http://127.0.0.1:3000

Sec-WebSocket-Location: ws://127.0.0.1:8000/test



.4.R....mh.....{.{"action":"move","x":450,"y":22,"w":1146,"h":551}.

我在 Chrome 和 Firefox 4.0 beta 中都試過這個。 他們都表現出相同的行為。 如果我去原來的博客網站,它工作正常。

另一件事。 如果我在 FF 或 Chrome 中進入 JS 控制台並執行以下操作:

ws = new WebSocket('ws://localhost:8000/test')
ws.send("foo")

它立即斷開連接並且不發送消息。 服務器顯示連接和握手,但從未收到消息。

我在這里發現了一些類似的問題,但要么在沒有發布修復程序的情況下解決了,要么在這種情況下似乎不適用。 如果可以更輕松,我可以發布要點中的代碼。

CloseEvent 有一個“code”屬性,可以為您提供有關連接關閉原因的信息。

“返回一個包含服務器發送的關閉代碼的無符號短。以下值是允許的狀態代碼。”

支持多種代碼值。 以下是最突出的:

  • 1000:關閉_正常
  • 1001:CLOSE_GOING_AWAY
  • 1002: CLOSE_PROTOCOL_ERROR
  • 1003: CLOSE_UNSUPPORTED
  • 1005:CLOSE_NO_STATUS

有關更多信息,請參閱 MDN 上的 CloseEvent API 文檔

主要的頭暈。 盡管我相信我安裝了最新版本的 Node.js,但我沒有。 我有幾台裝有 Node.js 的機器,我一定迷失了方向。 我有 Node.js v0.1.96。 升級到 v0.1.102 后,一切正常。

對不起大家! :-D

對於從瀏覽器發出發送時發生斷開連接的問題,您需要在發出發送之前等待 onopen 事件觸發:

var conn = new WebSocket('ws://localhost:8000/test');
conn.onopen = function (e) {
    conn.send('foo');
}
conn.onmessage = function (e) {
    console.log('got: ' + e.data);
}

在 Android 中,對我而言,問題在於我如何處理數據。 我能夠通過執行以下操作來確定。

  1. 檢查 NodeJs(服務器)中是否有問題 - 通過評論發送項ws.send(JSON.stringify(whatever)); .

  2. 檢查 Android(客戶端)中是否有問題 - 通過評論 onMessage。 Log.d("TAG","onMessage: " +text); 然后看看你是如何處理數據並注釋掉這些部分的。 onClosed, onFailure上運行日志貓

這至少應該可以幫助您查明問題,因為很難找到 NodeJs Websocket 幫助。 Languages are not hard - its the documentation, support and lack of community which is difficult. 好的烹飪書籍,項目視頻教程很難獲得。

我將數據作為 Json 數組獲取,並試圖以錯誤的方式填充回收器視圖。 這對我來說是個問題。

您還應該在 node.js 文件中嘗試以下代碼以查看原因

// Connection Closed
ws.on('close', function close(code, reason) {
console.log('ws is closed with code: ' + code + ' reason: ' + reason);
});

// On Error
ws.on('error', function(e) {
    console.log("error occured" +e);
});

有關完整的問題和解決方案,請參見此處: Websocket 關閉代碼:1006 Node Android okhttp3 AmazonEc2

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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