参考网上的资料,成功跑起来的代码(下载完整代码)
实现的功能:nodejs建立web服务器,实时输出“iostat -c 2”的结果,客户端发送命令时,输出请求的命令。 完整的代码或使用方法请参考压缩包裡的iostat-server.js文件及注释。
websocket protocol是html5一种新的协议(protocol)。实现了浏览器与服务器全双工通信(full-duplex)。 相比传统http有如下好处:
- 一个web客户端只建立一个tcp连接
- websocket服务端可以推送(push)数据到web客户端.
- 有更加轻量级的头,减少数据传送量,互相沟通的header是很小的-大概只有2 Bytes。
websocket客户端与服务端建立连接的过程: 客户端创建websocket实例,发送如下握手信息连接服务器:
Tue Jul 19 15:52:17 2011 GET / HTTP/1.1 Upgrade: WebSocket Connection: Upgrade Host: localhost:8088 Origin: http://localhost Sec-WebSocket-Key1: 3106 2 + 9 3 n. 17 c /k 0 + Sec-WebSocket-Key2: 279 90/1 4 38 2
服务器断获取包后,提取总长度为20的sec-websocket-key,进行如下计算:把以上字符串转化成数字,然后计算key中的空格数目,并用key值除以空格数得到最后key值。 最后发送包含以下信息的head给client,完成握手。
Tue Jul 19 15:52:17 2011 HTTP/1.1 101 Web Socket Protocol Handshake Upgrade: WebSocket Connection: Upgrade Sec-WebSocket-Origin: http://localhost Sec-WebSocket-Location: ws://localhost:8088/ Sec-WebSocket-Protocol: sample
具体的ws协议,可以参考: http://tools.ietf.org/html/draft-hixie-thewebsocketprotocol-76
客户端在握手成功后,客户端的websocket对象一共绑定了四个事件:
- onopen 建立连接后触发
- onmessage 收到消息后触发
- onerror 发生错误时触发
- onclose 关闭连接时触发 详细的websocket API,可以参考: http://dev.w3.org/html5/websockets/
通信数据都是以”\x00″开头以”\xFF”结尾的,并且都是UTF-8编码的。注意客户端的websocket对象能够自动将头尾去除,获得主体数据.
node.js天生就是一个高效的服务端语言,可以直接使用 javascript直接来处理来自客户端的请求,这样如果服务端这边需要大量的业务逻辑开发,则可以直接使用node开发。
运行效果如下: