0%

初窥WebSockets

要说最令人津津乐道的新浏览器的 API, 就数 Web Sockets 了. 接下来了解一下这个备受争议的 API 吧~

什么是 Web Socket?

Web Socket是 HTML5 出来的一个持久化新协议. 它的目标是在一个单独的持久链接上提供全双工, 让客户端和服务器之间的数据交换变得更加简单.

Web Socket 是基于 HTTP 协议来建立连接. 由于使用了自定义的协议, 因此它的 URL 模式策略也与标准的 HTTP 不同, 未加密的http://对应着ws://, 而加密的连接的https://也变成https://.

那使用 Web Socket 的好处是什么?

  1. 能够在客户端和服务器之间发送非常少的数据, 而不用担心 HTTP 那样字节级的开销. 由于传递的数据很小, 表面看起来会很适用于移动端.
  2. 主动性
    大家都知道, 标准 HTTP 请求是具有被动性的, 如 ajax轮询:
    客户端: “lalala, 帮我看一下我快递有变动吗?”
    服务端: “没呢, 没变化”
    客户端: “那现在呢?”
    服务端: “也还没..”
    客户端: “那现在呢?”
    服务端: “还没…”
    客户端: “那现在呢?”
    服务端: “好啦好啦, 物流发生变化了, 你看到这里这里了”
    客户端: “那开始派送了吗?”
    服务端: “还没…”
    这样的缺点是什么… ajax轮询需要服务器有很快的处理速度和资源, 而频繁过多的请求可能会报503 Server Unavailable的错误了.

而升级为 Websocket 后, 这时候服务器会主动把东西反馈给你, 如:
客户端: “哥们, 咱建立 Websocket 协议, 需要 chat,Websocket 协议版本:17(HTTP Request)”
服务端:”ok,确认,已升级为 Websocket 协议(HTTP Protocols Switched)”
客户端: “那有啥事的话跟我讲噢”
服务端: “balbalbal”
服务端: “balbalbal”
服务端: “hhhhhhhhhh”
服务端: “笑死啦 2333333”
就变成了这样,只需要经过一次 HTTP 请求,就可以做到源源不断的信息传送了。(在程序设计中,这种设计叫做回调,即:你有信息了再来通知我,而不是我傻乎乎的每次跑来问你, 这里场景就适用于聊天室之类的)

  1. 没有同源限制,客户端可以与任意服务器通信(不用担心跨域)

现状与短处

既然它存在这种优势为什么如今还是使用的不多呢?
HTML5新 API 嘛… 说到HTML5就不得不考虑到兼容性的问题, WebSocket 在各浏览器的兼容性不一致这是问题其一.

前文有提过. 相对于 PC 端, websocket的客户端和服务器之间发送非常少的数据, 表面看起来的确移动端会更有优势. 但是目前以国内的环境来说, 反而不好用. 当网络不稳定的时候开销尤其大.

看到这里或许会有人问, 啊? 你之前不是说只需要 1 次 HTTP 请求就可以做信息传送了蛮?? 是的, 没错. 大家可能会玩过像阴阳师这样的游戏? 网络一闪, 就会让你重新登录.而长轮询断一次只会卡一秒, 而 websocket 断了则要重新从认证开始, 那当网络不稳定时, 那开销可想而知.

其次就是性能上并没有绝对的优势, 所以当前主流还是标准的 HTTP 比较多, 而websocket, 据我所知当下适用的场景也只有手游上的使用了.

后记

websocket的路还很长, 虽然现在使用的不多, 但以后还是可以保留小小的期待. 上文提及资料有部分是来源于网上. 有部分是去咨询了相关的 dalao. 才疏学浅若有违权, 或者说的不对的地方望各位指出.

参考资料:
WebSocket 是什么原理?为什么可以实现持久连接? - Ovear 的回答 - 知乎
https://www.zhihu.com/question/20215561/answer/40316953

「请笔者喝杯奶茶鼓励一下」

欢迎关注我的其它发布渠道