我有一个非常简单的nodejs应用程序,我已经安装了socket.io和engine.io(不是同时)。
我正在尝试从标准WebSocket客户端(新WebSocket)连接
我遇到的第一个问题是客户端根本不会连接,我通过在服务器上将“destroy upgrade”设置为false来“修复”。
现在套接字正在尝试连接(readystate为0)但是我没有在服务器上获得连接事件或客户端上的onopen事件,所以我猜它永远不会连接。
我是否需要设置其他任何内容才能实现连接?
服务器正在运行express并侦听端口3000(socket.io搭载到为express创建的http服务器上) 客户做了
new WebSocket("ws://localhost:3000")
我也试过
new WebSocket("ws://localhost:3000/socket.io")
由于socket.io文档暗示这是默认端点但不起作用
答案 0 :(得分:2)
我用老式的方式(通过查看网络流量)来解决这个问题,我应该做的就是看一下signal.io docs,哦。这有两个部分,连接和发送数据。
要连接,客户端必须使用xhr协商,所以:
var time = new Date().getTime();
$.get("http://localhost:3000/socket.io/1/?t=" + time, function (data) {});
这将启动socket io所需的协商。 Socket.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服务器,您必须以其期望的格式构建数据,这在此处记录https://github.com/LearnBoost/socket.io-spec
之类的东西ws.send('5:::{"name":"my other event","args":[{"my":"data"}]}');