当前位置: 首页 > 知识库问答 >
问题:

node.js - socket.io客户端持续发送WebSocket connection to 'wss://网址/socket.io/?EIO=4&transport=websocket' failed: ?

江志业
2024-05-08

客户端持续发送:websocket.js:54 WebSocket connection to 'wss://www.xiaoyangst.top:8443/socket.io/?EIO=4&transport=websocket' failed:

image.png

我在nginx这边如何代理呢?

root@xy:/etc/nginx# cat nginx.confuser www-data;worker_processes auto;pid /run/nginx.pid;include /etc/nginx/modules-enabled/*.conf;events {    worker_connections 768;    # multi_accept on;}http {    sendfile on;    tcp_nopush on;    tcp_nodelay on;    keepalive_timeout 65;    types_hash_max_size 2048;        include /etc/nginx/mime.types;    default_type application/octet-stream;    server{        listen 443 ssl;        server_name www.xiaoyangst.top;        ssl_certificate /home/xyst/XrtcDemo/server/cert/www.xiaoyangst.top_cert_chain.pem;        ssl_certificate_key /home/xyst/XrtcDemo/server/cert/www.xiaoyangst.top_key.key;                root /home/xyst/XrtcDemo/myapp/build;                index index.html;                location / {                        try_files $uri %uri/ /index.html;                }                location /api {                         proxy_pass https://www.xiaoyangst.top:8443;             proxy_http_version 1.1;                proxy_set_header Upgrade $http_upgrade;                proxy_set_header Connection "upgrade";                proxy_set_header Host $host;                         proxy_set_header X-NginX-Proxy    true;                         proxy_set_header X-Real-IP $remote_addr;                         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;                         proxy_set_header X-Forwarded-Proto $scheme;                 }        location /socket.io {             proxy_pass https://www.xiaoyangst.top:8443;                   proxy_redirect     off;                   proxy_set_header   Host $host;                   proxy_set_header   X-Real-IP $remote_addr;                   proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;                   proxy_set_header   Upgrade $http_upgrade;                   proxy_set_header   Connection "upgrade";        }        }        ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # Dropping SSLv3, ref: POODLE    ssl_prefer_server_ciphers on;}

我觉得是后端没有接受到客户端建立连接的请求,即连接socket.io服务器

应该如何处理

补充:后端socket.io服务器无法处理这个网址,当我通过app.get来处理这个连接发现就可以

image.png
但问题是,这样并不能连接到我的socket.io服务器,否则我怎么和客户端的socket.io通信呢?

共有1个答案

巫马盛
2024-05-08

你的假设可能是正确的,后端可能没有正确地处理来自客户端的WebSocket连接请求。然而,这个问题可能由多种原因引起,包括但不限于:

  1. 后端服务器没有正确配置以接受WebSocket连接。
  2. Nginx没有正确地将WebSocket连接请求代理到后端服务器。
  3. 防火墙或安全组设置阻止了WebSocket连接。

首先,你需要确保你的后端服务器(在这个情况下是运行在www.xiaoyangst.top:8443的服务器)已经正确配置以接受WebSocket连接。这可能涉及到检查你的后端服务器代码,以及任何相关的WebSocket或socket.io配置。

其次,你需要检查Nginx的配置,确保它正确地代理了WebSocket连接。你的Nginx配置看起来已经包含了必要的设置,如proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection "upgrade";,这些设置是必需的,以便Nginx可以将WebSocket连接请求升级到WebSocket协议。

然而,请注意,你的location /socket.io块中的proxy_pass指令指向的是HTTPS协议,而WebSocket连接通常使用WSS(WebSocket Secure)协议。这可能会导致问题,因为Nginx可能无法正确地将WebSocket连接请求代理到后端服务器。你应该尝试将proxy_pass指令更改为使用WSS协议,如下所示:

location /socket.io {    proxy_pass wss://www.xiaoyangst.top:8443;    proxy_redirect     off;    proxy_set_header   Host $host;    proxy_set_header   X-Real-IP $remote_addr;    proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;    proxy_set_header   Upgrade $http_upgrade;    proxy_set_header   Connection "upgrade";}

如果更改后问题仍然存在,你可能需要进一步检查后端服务器的日志,以查看是否有任何有关未处理的WebSocket连接请求的错误或警告。此外,你也可能需要检查你的防火墙或安全组设置,以确保它们没有阻止WebSocket连接。

最后,你的假设也可能是错误的,问题可能并不在于后端服务器没有接受到连接请求,而是由于其他原因,如证书问题、CORS策略等导致的连接失败。因此,如果上述建议都不能解决问题,你可能需要更详细地调查问题的原因。

 类似资料:
  • 问题内容: 我正在尝试创建一个简单的脚本,以便每次文件更新时都将文件中的数据发送到客户端。我已经测试过,发现该文件已被读取,但是客户端什么也没收到。控制台中没有错误。我对socket.io相当陌生。 node.js代码 客户代码 问题答案: 每当事情无法正常进行时,您都需要诉诸“调试模式”。在这种模式下,您需要收集所有可能发生的事件,并从中学到什么。为此,请将以下代码添加到客户端: 这些消息都记录

  • 问题内容: 向所有客户端发送消息效果很好,但是我想向特定的用户名发送消息。我的server.js文件看起来像。它的作用是在运行时,客户端代码将用户添加到对象用户名以及套接字对象中。并立即将单个消息返回给每个连接的客户端。 发出消息的部分 问题答案: 试试这个: socket.id由socket.io保存,并且包含客户端的唯一ID。您可以使用以下命令进行检查:

  • 问题内容: 我有一个socket.io服务器正在运行,并且有一个带有socket.io.js客户端的匹配网页。一切正常。 但是,我想知道是否有可能在另一台机器上运行一个单独的node.js应用程序,该应用程序充当客户端并连接到上述的socket.io服务器? 问题答案: 使用Socket.IO-client应该可以做到这一点:https : //github.com/LearnBoost/sock

  • 问题内容: 是否有适用于Java的Socket.IO客户端?到目前为止,我只找到了仅适用于JavaScript的官方Socket.IO客户端和仅作为服务器的socket.io- java。 问题答案: 目前的选项有限: http://code.google.com/p/weberknecht/ https://github.com/TooTallNate/Java-WebSocket https:

  • Socket.IO 的开源 iOS 客户端,使用 swift 编写。 演示视频:http://fat.gfycat.com/EssentialBlueElectriceel.webm 使用示例: import Foundationlet socket = SocketIOClient(socketURL: "localhost:8880")socket.on("important message"

  • 问题内容: 我正在使用socket.io和node.js,直到现在看起来还不错,但我不知道如何从服务器向特定客户端发送消息,如下所示: 但是无论是还是方法似乎都无法满足我的需求。 我发现一种可能的解决方案是,该方法将不发送消息的SessionId数组作为第二个参数,因此我可以将此时连接了所有SessionId的数组传递给服务器,除了那个我希望发送邮件,但是我觉得必须有一个更好的解决方案。 有任何想