客户端无法访问 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 和管理器标题。
项目托管在 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 和管理器标题。