WebSocket 原理 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
jonychen1
V2EX    2018

WebSocket 原理

  •  
  •   jonychen1 2018-07-26 10:40:17 +08:00 1604 次点击
    这是一个创建于 2635 天前的主题,其中的信息可能已经有所发展或是发生改变。

    今天来讲一下 WebSocket 的原理,能让你更深入的去了解 WebSocket,深知其原理,才能更好的去使用它。 WebSocket 是 HTML5 出的协议,也就是说 HTTP 协议没有变化,或者说没关系,但 HTTP 是不支持持久连接的(长连接,循环连接的不算)。 首先 HTTP 有 1.1 和 1.0 之说,也就是所谓的 keep-alive,把多个 HTTP 请求合并为一个,但是 Websocket 其实是一个新协议,跟 HTTP 协议基本没有关系,只是为了兼容现有浏览器的握手规范而已,就是说它是 HTTP 协议上的一种补充。有交集,但是并不是全部。 另外 Html5 是指的一系列新的 API,或者说新规范,新技术。Http 协议本身只有 1.0 和 1.1,而且跟 Html 本身没有直接关系。通俗来说,你可以用 HTTP 协议传输非 Html 数据,就是这样。再简单来说,层级不一样。 WebSocket 的协议是持久化的,而 HTTP 是非持久化的协议。 首先我们来看个典型的 Websocket 握手 GET /chat HTTP/1.1 Host: server.example.com Upgrade: websocket Connection: Upgrade Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw== Sec-WebSocket-Protocol: chat, superchat Sec-WebSocket-Version: 13 Origin: http://example.com 这段类似 HTTP 协议的握手请求中,多了几个东西。我会顺便讲解下作用。 Upgrade: websocket Connection: Upgrade 这个就是 Websocket 的核心了,告诉 Apache、Nginx 等服务器:注意啦,我发起的是 Websocket 协议,快点帮我找到对应的助理处理。 Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw== Sec-WebSocket-Protocol: chat, superchat Sec-WebSocket-Version: 13 首先,Sec-WebSocket-Key 是一个 Base64 encode 的值,这个是浏览器随机生成的,告诉服务器:验证是不是真的是 Websocke t 助理。 然后,Sec_WebSocket-Protocol 是一个用户定义的字符串,用来区分同 URL 下,不同的服务所需要的协议。 最后,Sec-WebSocket-Version 是告诉服务器所使用的 Websocket Draft (协议版本)。 然后服务器会返回下列东西,表示已经接受到请求, 成功建立 Websocket 啦! HTTP/1.1 101 Switching Protocols Upgrade: websocket Connection: Upgrade Sec-WebSocket-Accept:HSmrc0sMlYUkAGmm5OPpG2HaGWk= Sec-WebSocket-Protocol: chat 这里开始就是 HTTP 最后负责的区域了,告诉客户端已经成功切换协议 Upgrade: websocket Connection: Upgrade 依然是固定的,告诉客户端即将升级的是 Websocket 协议,而不是 mozillasocket,lurnarsocket 或者 shitsocket。 然后,Sec-WebSocket-Accept 这个则是经过服务器确认,并且加密过后的 Sec-WebSocket-Key。 服务器:返回 ID CARD 来证明。 后面的,Sec-WebSocket-Protocol 则是表示最终使用的协议。 至此,HTTP 已经完成它所有工作了,接下来就是完全按照 Websocket 协议进行了。具体的协议就不在这阐述了。 关注 GoEasy WebSocket 简单开发不迷路。

    目前尚无回复
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2185 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 22ms UTC 16:09 PVG 00:09 LAX 09:09 JFK 12:09
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86