2014-03-25 492 views
2

我使用的Redis + Webdis在Debian 7 32.WebSocket連接,錯誤1006(Webdis)閉合

我的問題是,所有WebSocket連接正在完成所述第一命令之後與退出代碼1006關閉(除「SUBSCRIBE」一個)。例如,對於這個testJSON()函數

function testJSON() { 
    var jsonSocket = new WebSocket("ws://ip:7379/.json"); 
    jsonSocket.onopen = function() { 
    console.log("JSON socket connected!"); 
    jsonSocket.send(JSON.stringify(["SET", "hello", "world"])); 
    jsonSocket.send(JSON.stringify(["GET", "hello"])); 
    }; 
    jsonSocket.onmessage = function(messageEvent) { 
    console.log("JSON received:", messageEvent.data); 
    }; 
    jsonSocket.onclose = function(messageEvent) { 
    //some logging 
    }; 
    jsonSocket.onerror = function(messageEvent) { 
    //some logging 
    }; 
} 
testJSON(); 

我得到(螢火蟲)

JSON socket connected! 
JSON received: {"SET":[true,"OK"]} 
onClose: error.code 1006 

onerror事件is'nt的{ 「SET」 工作,並經過:真實, 「OK」]}響應我的連接關閉。 GET命令也不能工作。在Firefox和Chrome中同樣的行爲。我檢查了標題,看起來它們是有效的。

有什麼建議嗎?

+0

1006是一個特殊的代碼,意味着連接被瀏覽器實現異常(本地)關閉。我試過你的例子,並將服務器更改爲ws://echo.websocket.org它似乎工作正常。你的瀏覽器的版本是什麼?你可以嘗試連接到echo.websocket.org和chk你是否仍然斷開連接。 –

+0

嗨。 TY,連接到ws://echo.websocket.org運行良好,沒有任何問題。我有一些關於不正確的服務器響應的建議,但似乎webdis無法記錄websocket操作。我使用FF 27.0.1 –

回答

2

好的,這是一個功能,而不是bug。在代碼(websocket.c):

if (cmd_is_subscribe(cmd)) { 
    r->keep_alive = 1; 
} 

更改此代碼解決了我的問題的一部分,但不是全部。