【问题标题】:Socket.io events not received (nginx reverse proxy, server to client)未收到 Socket.io 事件(nginx 反向代理,服务器到客户端)
【发布时间】:2017-02-03 14:50:00
【问题描述】:

我有一个在 nginx 反向代理下运行的 nodejs socket.io 应用程序。

我的nginx配置如下:

location ~ ^/(online|socket\.io) {
        proxy_pass http://localhost:8888;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }

这似乎有效,我的 nodejs 应用程序可以正常连接。在服务器端 socket.io 我有以下内容:

io.of('/online').on('connection', function(socket){

这似乎工作正常,'connection' 事件正在触发

当我尝试从服务器向客户端发出事件时出现问题:

socket.join("users");
io.sockets.in("users").emit("got_users",users);

客户端没有接收到“got_users”事件。在客户端,我有以下内容:

a4e.socket=io.connect('http://www.example.com/online');

这似乎工作正常,但是:

a4e.socket.on("got_users",function(online_users){

无论我尝试什么,这都不会触发“got_users”事件。

非常感谢任何帮助。

【问题讨论】:

    标签: node.js nginx socket.io reverse-proxy


    【解决方案1】:

    我终于想通了,下面这行:

    io.sockets.in("users").emit("got_users",users);
    

    应替换为:

    io.of("/online").in("users").emit("got_users",users);
    

    然后就可以了。

    【讨论】:

    • 谢谢@praine。我快要迷失了,绝望了。
    • ^^ 以上工作。这是我直接从连接中完成的方法: const httpIo = socket(httpServer, { origins: ':' }); httpIo.of('/yourProxyurlhere').on('connection', (currentSocket) => {Your Code Here})
    • 您能对此提供更好的解释吗?我也面临同样的问题
    • @Lhew 查看关于命名空间的 socket.io 文档:socket.io/docs/rooms-and-namespaces
    • 这对我来说看起来很可疑......因为文档说'命名空间是 Socket.IO 协议的实现细节,与底层传输的实际 URL 无关, 默认为 /socket.io/….' ,即使你在 Nginx 上使用这个 /online/ 路径。我通过使用路径来遵循文档,例如socket = io(http, {path: '/online/'})。即使您的这种实现没有太大意义,我还是会尝试。感谢您的帮助。
    猜你喜欢
    • 2019-02-01
    • 1970-01-01
    • 2013-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-16
    • 1970-01-01
    相关资源
    最近更新 更多