带有socketio/engineio的WebSocket客户端

带有socketio/engineio的WebSocket客户端,websocket,socket.io,Websocket,Socket.io,我有一个非常简单的nodejs应用程序,我在其中安装了socket.io和engine.io(不是同时安装的) 我正在尝试从标准WebSocket客户端(新WebSocket)进行连接 我遇到的第一个问题是客户端根本无法连接,我已通过在服务器上将“销毁升级”设置为false“修复”了这个问题 现在套接字正在尝试连接(readystate为0),但我在服务器上没有收到连接事件,在客户端没有收到onopen事件,所以我猜它永远不会连接 我是否需要设置其他设置来实现连接 服务器正在运行express并

我有一个非常简单的nodejs应用程序,我在其中安装了socket.io和engine.io(不是同时安装的)

我正在尝试从标准WebSocket客户端(新WebSocket)进行连接

我遇到的第一个问题是客户端根本无法连接,我已通过在服务器上将“销毁升级”设置为false“修复”了这个问题

现在套接字正在尝试连接(readystate为0),但我在服务器上没有收到连接事件,在客户端没有收到onopen事件,所以我猜它永远不会连接

我是否需要设置其他设置来实现连接

服务器正在运行express并侦听端口3000(socket.io搭载到为express创建的http服务器上) 客户机执行以下操作:

new WebSocket("ws://localhost:3000")
我也试过了

new WebSocket("ws://localhost:3000/socket.io")

正如socket.io文档所暗示的那样,这是默认端点,但两者都不起作用,我用老式的方法(通过查看网络流量)解决了这个问题,而我本应该做的是查看signal.io文档,哦,好吧。这有两个部分,连接和发送数据

要连接,客户端必须使用xhr进行协商,因此:

var time = new Date().getTime();
$.get("http://localhost:3000/socket.io/1/?t=" + time, function (data) {});
这将启动套接字io所需的协商。io返回一个id、一些超时和协议列表,除了id之外,我忽略所有这些

    // in the xhr callback function
    var key = data.split(":")[0];

    var ws = new WebSocket('ws://localhost:3000/socket.io/1/websocket/' + key);
这就联系到了

要将数据发送到socket.io服务器,您必须按照此处记录的格式对数据进行帧处理 差不多

ws.send('5:::{"name":"my other event","args":[{"my":"data"}]}');