[英]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”屬性,可以為您提供有關連接關閉原因的信息。
“返回一個包含服務器發送的關閉代碼的無符號短。以下值是允許的狀態代碼。”
支持多種代碼值。 以下是最突出的:
主要的頭暈。 盡管我相信我安裝了最新版本的 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 中,對我而言,問題在於我如何處理數據。 我能夠通過執行以下操作來確定。
檢查 NodeJs(服務器)中是否有問題 - 通過評論發送項ws.send(JSON.stringify(whatever));
.
檢查 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.