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

使用socket.io-client连接到URL

夏宪
2023-03-14

我有这个演示设置:

>

  • 节点.js在端口 8001 上运行的 WebSocket 服务器 #1(使用“socket.io”)

    节点。js WebSocket服务器#2(使用'socket.io')在端口8002上运行

    在端口 8000 上运行的 nginx websocket 反向代理:

    node.js客户端(使用socket.io客户端,而不是浏览器JavaScript客户端)尝试连接到服务器#1:

    var socket = require('socket.io-client')('ws://localhost:8000/wstest1/');
    

    但它无法连接。ngin x日志说:

    127.0.0.1 - - [06/Feb/2015:16:16:04 +0100] "GET /socket.io/?EIO=3&transport=polling&t=1423235764132-1&b64=1 HTTP/1.1" 404 168 "-" "node-XMLHttpRequest"
    

    因此,到< code>/wstest1/的路径在某处丢失了。

    nginx设置:

    http {
        map $http_upgrade $connection_upgrade {
            default upgrade;
            '' close;
        }
    
        server {
            listen 8000;
            location /wstest1/ {
                proxy_pass http://localhost:8001;
                proxy_http_version 1.1;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection "upgrade";
            }
            location /wstest2/ {
                proxy_pass http://localhost:8002;
                proxy_http_version 1.1;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection "upgrade";
            }
    
        }
    }
    

    更新:我刚刚找到了这个很好的解释(socket.io/docs/client-api/),为什么它不起作用:

    为URL中的路径名指定的名称空间返回一个套接字实例,默认为/。例如,如果url是http://localhost/users,将建立到http://localhost和套接字的传输连接。将与/users建立IO连接。

    对此有什么解决办法吗?

    真丢脸。RTFM/RTFC的经典案例(C代表代码):

    使用正确的路径:

    var socket = require('socket.io-client')('ws://localhost:8000', {path: '/wstest1/socket.io'});
    

    使用正确的ngin x配置:

    proxy_pass http://localhost:8001/;
    

    这个小小的尾随/有所不同。

  • 共有2个答案

    齐朝明
    2023-03-14

    请参阅文档http://socket.io/docs/rooms-and-namespaces/.

    重要提示:命名空间是Socket.IO协议的实现细节,与底层传输的实际URL无关,默认为/socket.io/。

    如果希望将socket.ioendpoint托管在/wstest1或/wstest2,只需在创建服务器时将其作为路径参数传递即可。

    盖锐
    2023-03-14

    在/etc/nginx/nginx.conf中设置位置

    location /wstest1 {
        proxy_pass http://localhost:8001;
    }
    
    location /wstest2 {
        proxy_pass http://localhost:8002;
    }
    

    查看更多:http://nginx.org/en/docs/http/ngx_http_core_module.html#location

     类似资料:
    • 问题内容: 尝试使用socket.io- client连接到用Go编写的websocket服务器。我已经使用节点WebSocket库(npm)成功连接。因此,有效的Websocket代码如下所示: 非常简单并且有效-另一端的套接字以设定的频率发送消息。但是我最初尝试使用(npm),但是无法继续使用。它肯定将websocket列为其首选传输,但是该死,如果我能连接它的话: 连接永远不会发生,因此不会

    • 我正在制作一个实时多人游戏socket.io和node.js,我有一个html文件,运行一个公共脚本连接到服务器并运行命令,以及定义我需要的库

    • 我正在使用套接字。io,应用程序由AWS提供。我收到一个浏览器控制台错误: websocket.js:54 WebSocket 连接到 'wss://www.tidee.com/socket.io/?EIO=4 客户代码: 服务器代码: 在 AWS 中,安全组接受端口 443,负载均衡器侦听端口 443。 应用程序在本地运行时工作(状态 101),并使用 协议。

    • 问题内容: 我无法让我的Android应用程序连接到socket.io聊天服务器。我正在使用由Gottox创建的socket.io-java- client,可以在这里找到:https : //github.com/Gottox/socket.io-java- client 服务器在端口7000上本地运行。我使用的是Android模拟器,因此我使用的是10.0.2.2:7000来访问服务器。 任何

    • 我无法连接到我的节点。js服务器。当通过节点使用http web服务器在本地运行它时,它工作得很好,但是当连接到外部时,它会加载<code>socket.io。js文件很好,但当尝试使用套接字时,它会从URL中删除端口,无法连接。 而不是在网络请求中执行此操作: http://external-domain.com:3000/socket.io/?EIO=3 它是这样做的: http://exte

    • 问题内容: 在我的node.js / Express.js应用程序中,我需要通过socket.io连接传递参数(请参见另一篇文章)。 在客户端,我有类似的东西: 编辑 在服务器端: 编辑 但是控制台中什么也没有。 还有另一种方法可以实现吗? 编辑2 这是客户端的完整代码: 以及服务器端的完整代码: 具有功能: 感谢你的帮助 问题答案: 就在这里。 1)就像参数一样,因此请替换为(如果您想传递多个参