max*_*022 9 handshake socket.io
我正在尝试使用elephant.io将事件从我的PHP脚本发送到我的nodejs服务器.使用此库执行测试我注意到握手没有按预期发生.
在阅读了有关 socket.io的客户端 - 服务器握手的规范之后,我测试了一个简单的握手请求到我的nodejs服务器:
POST "http://acme.local:3700/socket.io/1"
Run Code Online (Sandbox Code Playgroud)
但是这会返回以下JSON消息:
{
"code": 0,
"message": "Transport unknown"
}
Run Code Online (Sandbox Code Playgroud)
我不确定这个错误是由于我正在使用的socket.io版本(v1.0.2)还是握手请求只是格式错误.
neu*_*ino 14
问题是socket.io v1.0.x改进了它的传输层.在0.9.x中,socket.io首先尝试建立一个websocket连接,如果websocket被阻止,超时等,则回退到轮询.所以你可以从"sid:interval_time:timeout_time:..."下载一个websocket配置字符串.模式://地址:端口/ socket.io/1 /.
但是,在v.1.0.x中,客户端必须首先建立一个广泛支持的轮询传输,然后升级到websocket.并且传输配置在json中格式化为:schema:// addr:port/socket.io /?transport = polling.json对象看起来像{"sid":"xxx","upgrade":["websocket",..],"pingInterval":xxx,"pingTimeout":xxx}.
因此,任何适用于v0.9.x的客户端都无法与v1.0.x通信.对elephant.io有一个临时修复:https://github.com/Wisembly/elephant.io/pull/53/files#diff-8f2bc4c2d1b3889bc393b67f296edbc5R97.但是我无法让它发挥作用.
据推测,socket.io v1.0.x的所有第三方客户端现在都是其JavaScript代码的完整端口.我试图根据上面的elephant.io帖子修复socketio4net,但失败了.
08/26更新.
这是我得到的:
如何与socket.io v1.0服务器通信:
GET http [s]:// host:port/socket.io /?transport = polling
服务器在响应正文中响应JSON配置字符串,并将一些未知字符作为标头.
c-style char*useres的警告:此字符串以'\ 0'开头.
该字符串看起来像:\ 0xxxx {"sid":"xxx","升级":["websocket","polling",..],pingInterval:xxxx,pingTimeout:xxxx}.
sid:websocket连接的seesion id.
升级:可用的运输方式.请确保"websocket"就是其中之一.
pingInterval&pingTimeout:ping每个pingInterval服务器并检查pingTimeout中的pong.
在ws [s]:// host:port/socket.io /?transport = websocket&sid = sid建立websocket连接
成功连接后,将字符串"52"发送到socket.io服务器.
监听服务器消息,等待字符串"40"以确认客户端和服务器之间的websocket链接.
发送您在服务器上设置的任何其他命令.
注意:
v1.0将其消息传输格式更改为engine.io_type + socket.io_type + real_message_in_json.(我不知道v0.9中的端点在哪里开始.)
engine.io消息类型:
socket.io消息类型:
因此,"52"表示UPGRADE_EVENT,"40"表示MESSAGE_CONNECT.通常,服务器消息以"42"开头,即MESSAGE_EVENT.PING和PONG不需要socket.io消息.我想知道UPGRADE是否也能像这样工作.
获得一个有效的websocket客户端,你很高兴!
PS elephant.io 3.0即将推出,支持v1.0.
| 归档时间: |
|
| 查看次数: |
10141 次 |
| 最近记录: |