Javascript 客户端连接并接收websocket数据,但无法发送

Javascript 客户端连接并接收websocket数据,但无法发送,javascript,node.js,websocket,network-programming,Javascript,Node.js,Websocket,Network Programming,我有这段代码在几个设备上运行,没有问题。但有一个设备出现了让我发疯的问题 客户端设备可以连接到websocket服务器并接收数据,但当我尝试发回数据时,服务器不会接收任何数据。结果是间歇性的,但大部分时间没有反应;但是,我从未丢失到客户端设备的SSH连接。没有错误消息,我只是看到我的客户端设备接收到来自服务器的请求,然后发送数据,但服务器没有显示任何内容。当我重新启动客户端程序时,我得到一个响应 代码非常简单: Server: socket.emit('get settings',data);

我有这段代码在几个设备上运行,没有问题。但有一个设备出现了让我发疯的问题

客户端设备可以连接到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
});
服务器代码:

客户端代码:

更新:我解决了这个问题,但是我不明白为什么,所以我没有回答。我的程序工作如下:

设备[n]继电器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”,并且我使用了本机web套接字,前端没有任何模块。就我使用“socket io”而言,我在前端和后端都使用了它


这里有相当复杂的代码。我可以建议把所有的评论都删掉。从简单的“echo”服务器(乒乓)开始,然后扩展功能。

我将“ws”模块用于其他用途。我使用“socket.io”处理手头的问题。参见第258行:我将按照您的建议做一个简单的测试。奇怪的是,这是唯一一款有问题的设备,尽管它和其他设备一样是树莓皮3。它是通过移动连接运行的,但其他的也是。更新:当我将服务器端口从80更改为5000时,它可以工作。仍然不知道为什么或者如何解决这个问题。我不明白为什么这是唯一有问题的设备,但这一定是一个线索。检查防火墙规则,查看服务器使用的端口的输入和输出。或者,您可以尝试将消息名称
加载设置更改为另一个,然后再次测试。我正在使用移动连接,因此无法访问端口:请参阅我的更新