带有socketio / engineio的WebSocket客户端

时间:2014-01-30 22:48:04

标签: websocket socket.io

我有一个非常简单的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文档暗示这是默认端点但不起作用

1 个答案:

答案 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"}]}');