稀有猿诉

十年磨一剑,历炼出锋芒,说话千百句,不如码二行。

Introduction to WebSocket

WebSocket是HTML5带来的新时代网络通信协议,它让前端的能力再一次得到提升,因为通信不再是单向的了。最初在浏览器和JavaScript中有很好的支持,现在各种编程语言和平台都支持WebSocket协议了。今天就来学习一下它。

缘起

在以往的前端中通过Ajax或者Jsonp可以让前端像一般的桌面客户端一样,有了更好的交互方式,但总的来说仍然局限于单向通信,因为底层的协议仍是HTTP,只能由客户端发起请求,服务器来响应。对于更新潮的需求,比如服务器向客户端推送消息,用HTTP来实现就略显笨拙了,常规的方法就是建立长链接)或者让客户端来轮询(polling),但这显然效率不高。于是就有了WebSocket,它支持双向通信(全双工通信信道),除了客户端主动发起请求外,服务器也可以主动向客户端推送消息。通信效率和交互性又一次得到了大大的提升。

就协议本身来说,它与HTTP一样,都是基于TCP实现的,对于协议本身想要深入了解的,可以去看协议规范

另外,需要注意,WebSocket协议的地址的schema是wss://xxxx

WebSocket in Android

安卓平台也已经有了现成的WebSocket协议可以使用了,已经比较成熟了,直接使用就行了。

  • Java-WebSocket 是一个WebSocket协议的纯Java实现,适用于所有JVM平台
  • Socket.IO 这个不单单是WebSocket,它在WebSocket协议基础之上又进行了进一步的封装,在API的易用性面以及错误处理和状态处理上面有了不少的提升。各种语言平台基本都有支持了。

测试服务器

光有客户端还不够,还需要有测试服务器,整理一下如何搭建测试服务器。

公有的测试服务器

在线的免费的可公开使用的简单WebSocket服务器,一般都是echo式的,也即把请求的数据直接当成回复推给client,这个可以当作chat类的测试server。

自已搭建服务器

此外,就是用WebSocket服务端的组件来自己搭建服务器,当然也都有现成的组件,配置一下就可以了,只不过需要运行在自己的Server上面。

  • Socket.IO 对的,这货Server端Client端全套都提供了
  • uWebSockets 核心库是用C/C++实现的,可以与Node.js无缝衔接
  • WebSocket-Node 基于Node.js,用纯JavaScript实现的
  • websocketd 一个独立的WebSocket Daemon,不依赖于其他的组件,功能强大,配置简单,方便使用,只需要提供一个Shell脚本就可以了
  • echo-server 基于Go实现的,支持HTTP协议和WebSocket协议的echo server
  • python echo server 基于Python的echo server,不确定是否支持WebSocket
  • Echo 基于Go的Echo Web Frameworks
  • WebSocket echo server 基于Node.js

参考资料

Comments