簡體   English   中英

客戶端連接並接收WebSocket數據,但無法發送

[英]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.

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