CNode

websocket与node.js

Aaddcn发布于14 年前最后回复14 年前0 回复4588 浏览0 收藏

参考网上的资料,成功跑起来的代码(下载完整代码)

实现的功能: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开发。

运行效果如下:

查看回复

回复 (0)

暂无回复,成为第一个参与讨论的人。
参与回复
登录后即可参与回复。登录