看看socket.io
看看socket.io
手绘灿烂 发表于3年前
看看socket.io
  • 发表于 3年前
  • 阅读 521
  • 收藏 1
  • 点赞 0
  • 评论 0

【腾讯云】新注册用户域名抢购1元起>>>   

摘要: socket.io 协议粗解

第三版的Engine.io 协议

来看一下 Engine.io 会话

    1 创建一个会话连接到Engine.io使用 URL

    2 当连接 open 的时候,server会响应一下JSON-encoded 握手数据:

            。 sid     会话ID(string)

            。 upgrades    会话升级得字符串(Array of String)

            。 pingTimeout     Server配置的ping超时时间

    3 客户端发送ping 服务器端要发送pong 响应

    4 客户端和服务器端可以随意交换消息包。

    5 Polling transports 可以发送一个“close” 关闭socket。因为他总是“opening” and “closing”


URLs

    一个 Engine.io url的组成:

        /engine.io/[?]

      1 engine.io pathName的更改取决于使用者使用的 更高级别的框架。

      2  还有四个保留的query string  :

            。 transport 连接协议的名称

            。 j  如果transport 是 polling , JSONP响应是必须的, j 必须设置为JSONP的响应索引。

            。 sid 如果客户端提供了session Id, 那么query string上就必须有

            。 b64  如果不支持xhr2, b64=1 就表示server端的binary data 发送的是base64 编码的数据。

       

Encoding 

    编码的包里面包含两部分

            packet

            payload

  Packet

        这是一个UTF-8编码的string or binary data。

        Stirng  <packet type id>[<data>]  example  2probe

        binary data: 当我们发送二进制数据的时候 type id 要是第一个字节, 剩下是实际的内容 4|0|1|2|3|4|5

        

    packet type id:

        0 open  向服务端发送一个创建新的传输连接

        1 close  关闭当前的传输协议, 但并不关闭当前的socket 连接

        2 ping 发送ping 包  example 2probe

        3 pong 发送pong 包 example 3probe

        4 message 表示发送的是消息

            example server 发送 4HelloWorld

                           client 接收消息并回调 socket.on('message', function(data) {console.log(data)})

        5  upgrade 

                在服务器和客户端切换传输协议之前, 根据upgrade 发送的协议测试,如果成功就切换新传输协议

        6 noop

            主要使用在轮询升级到websocket时

            example

                1 client 创建新的连接和传输协议

                2 client send 2probe

                3 server send 3probe

                4 client send 5

                5 server 清理和关闭旧的传输协议,并切换到新的传输协议       


Payload 

    由一组一组的<length1>:<packet1>这样的包组成, 不支持xhr2.

    

Transport

    支持的传输协议

        websocket

        flashsocket

        polling

            jsonp

            xhr

    https://github.com/socketio/engine.io-protocol

标签: engine.io socket.io
  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
粉丝 7
博文 37
码字总数 20728
×
手绘灿烂
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: