[英]Client connects and receives websocket data but can not send
我有這段代碼可以在多個設備上正常運行。 但是一個設備出現問題,使我發瘋。
客戶端設備可以連接到websocket服務器並接收數據,但是當我嘗試將數據發送回時,服務器不會接收任何數據。 結果是斷斷續續的,但是大多數時候都沒有響應。 但是,我永遠不會丟失與客戶端設備的SSH連接。 沒有錯誤消息,我只是看到我的客戶端設備從服務器接收請求,然后發送數據,但是服務器什么也沒顯示。 重新啟動客戶端程序時,得到響應。
代碼非常簡單:
Server:
socket.emit('get settings',data); //client receives this!
socket.on('load settings', function (data) {
console.log("load settings |",data.mac); //no response from client
device_socket.emit('loaded settings',data);
});
Client:
var relay = require('socket.io-client')("http://"+relay_server+":"+relay_port);
relay.on('get settings', function (data) {
relay.emit('load settings', settings); //server never gets this!
console.log("sending settings"); //this is reached without error
});
服務器代碼: https : //github.com/physiii/open-automation/blob/master/relay/socket.js
客戶端代碼: https : //github.com/physiii/open-automation/blob/master/gateway/socket.js
更新:我解決了問題,但是我不明白為什么,所以我沒有回答。 我的程序工作如下:
devices [n] <--- sockets [n] --->中繼<--- socket ---> angular.js
如果您閱讀上面的問題,看來問題顯然出在設備和套接字之間(請記住只有一個設備出了問題)。 當我更改服務器端口時,我意識到該設備可以工作。 經過調查后,我更改了與服務器的angular.js連接(使用location.host獲取該連接)並使之正常工作,但我不知道為什么會導致上述行為:
一行更改為userinfo.js(由於愚蠢的信譽點而無法發布鏈接)
我改變了這個:
$rootScope.server_address = location.host;
var parts = $rootScope.server_address.split(":");
$rootScope.server_ip = parts[0];
$rootScope.port = parts[1];
var relay_socket = io.connect("http://" + $rootScope.server_address + ":" + $rootScope.port);
對此:
$rootScope.server_address = location.host;
var parts = $rootScope.server_address.split(":");
$rootScope.server_ip = parts[0];
$rootScope.port = parts[1] || 80;
var relay_socket = io.connect("http://" + $rootScope.server_address + ":" + $rootScope.port);
現在顯然需要更改它,因為當我不指定端口io.connect(“ domain.com:”)時,其末尾帶有“:”,但是為什么這只影響一台設備對我來說還是個謎。
我認為出現此問題是因為您在后端使用“ ws”模塊,在前端使用“ socket-io”。
我記得曾經使用過“ ws”,並且我使用了本地網絡套接字,前端沒有任何模塊。 就我使用“ socket-io”而言,我在前端和后端都使用了它。
而且那里有相當復雜的代碼。 我可以建議全部注釋掉。 從簡單的“回聲”服務器(乒乓球)開始,然后擴展功能。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.