WebSocket协议简析

websocket由rfc6455所定义,主要用于在html5上模拟raw socket通信,这个牛逼的feature需要浏览器支持(很显然的)。
websocket是传统的c/s协议,服务端和客户端(通常是浏览器)分别遵循rfc6455的定义进行实现,由浏览器暴露接口给js进行客户端编程(暴露给js的接口用起来很简单,本文就不讨论了)。
根据rfc6455所述(6455的篇幅较为短小,跟以前读过的3720比起来的话。。。),websocket是用来解决browser-based应用需要双向通信的需求。它实际上是一种建立在tcp之上的传输协议(连接建立时会使用HTTP协议进行handshake),所以一个ws连接是占用一个tcp连接的,并且是有状态的。
相较于raw socket来说它有一些很神奇的功能,比如它不会粘包(使用frame来界定消息包),在协议头中表达payload长度的字段是可变的(这使得小包时可以节省一点流量,大包时也能表达,当然它其实是支持分片传输的)。
一个ws连接始于client的handshake:
官方的格式示例如
GET /chat HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
Origin: http://example.com
Sec-WebSocket-Protocol: chat, superchat
Sec-WebSocket-Version: 13
一个实际的格式如下(可以看到在这个handshake之前做了TCP的三路握手建立连接)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值