客户端无法访问 socket.io 服务器

Client unable to hit socket.io server

项目托管在 Digital Ocean 上。

在客户端,抛出 404 错误

GET http://134.209.147.204/socket.io/?EIO=3&transport=polling&t=NKKWF-X //404

这是 nginx 配置文件

server {
        listen 80;
        root /var/www/html;
        location / {
                proxy_pass http://127.0.0.1:5000; (where the frontend is running)
                proxy_http_version 1.1;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection "upgrade";
        }
        location /socket/ {
                proxy_pass http://localhost:3001; (where the sockets.io server is running)

        }

}

前端

socket = io('/socket/')

前端和后端运行无任何错误,可以从浏览器访问。

经过几天的黑客攻击,我终于能够让它工作了!

nginx 配置

upstream websocket {
    server 127.0.0.1:3001;
}

server {
    listen 80;
    root /var/www/html;
    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }

    location /ws/ {
        proxy_pass http://websocket/socket.io/;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}

socket.io 服务器

const app = require('express')();
const server = app.listen(3001);
const io = require('socket.io').listen(server);

socket.io 客户

 socket = io.connect('http://yourdomain/', {path: '/ws/'})

我在尝试将 sockets.io 应用程序连接到 Apache2 服务器后面的 nodejs 服务器时遇到了同样的问题。我使用 /video/ 访问 nodejs。我读了这个答案但没有明白。假我!但以防万一我不是一个人,我会尝试在这里进一步澄清它。

我最终不得不遵循 sockets.io 的代码来理解它们在文档中的含义。我真是个笨蛋。文档说:

A new Socket instance is returned for the namespace specified by the pathname in the URL, defaulting to /. For example, if the url is http://localhost/users, a transport connection will be established to http://localhost and a Socket.IO connection will be established to /users

遵循代码后,含义(在我的假人的脑海中)变得清晰了。套接字连接是使用我在 socket=io("url/video/") 中指定的“字符串”建立的,但传输连接将仅尝试其“url”部分。要更改传输连接路径,您需要指定 Manager class 文档中描述的选项之一,这与 io class.

的选项相同

Here 是相关文档的 link,您需要阅读 io 和管理器标题。