赞
踩
WebSocket 协议实现在受控环境中运行不受信任代码的一个客户端到一个从该代码已经选择加入通信的远程主机之间的全双工通信。用于这个的安全模型是通
常由 web 浏览器使用的基于来源的安全模型。该协议包括一个打开阶段握手、接着是基本消息帧、TCP 之上的分层(layered over TCP)。
参考文档:
中文版:WebSocket协议中文版.pdf
英文版:the Websocket Protocol rfc6455.pdf
WebSockets 是一种基于 ws 协议的技术,它使得建立全双工连接成为可能。websocket 常见于浏览器中,但是这个协议不受使用平台的限制。
编写 WebSocket 客户端程序 参见网址:
https://developer.mozilla.org/zh-CN/docs/WebSockets/Writing_WebSocket_client_applications
编写 WebSocket 服务器端程序实现:
http://blog.sina.com.cn/s/blog_87973fe60102uwzd.html 嵌入式WebSocket的实现
嵌入式客户端实现同样步骤:
第一步建立线程任务,向TCP、端口建立连接connnect,等待连接建立成功。
第二步向服务端发送http请求
如:
GET /webServices/ocpp/CP3211 HTTP/1.1
Host: some.server.com:33033
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==
Sec-WebSocket-Protocol: Pro1.0
Sec-WebSocket-Version: 10
如加密的话,还需先base64编码。
第三步读取服务端回复数据;
第四步,解析服务端回复的数据是否正确
如:
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
Sec-WebSocket-Protocol: Pro1.0
第五步,如第四步数据解析正确,此时便建立了数据通信通道
这样就可以正常通信发送数据。
数据格式:
当然数据格式详细见the Websocket Protocol rfc6455.pdf。
linux下websocket常用库参考:
noPoll
noPoll 0.2.6 发布,这是个稳定版本。此版本包括了一些 bug 修复;添加了 noPoll 连接器重试 EWOULD BLOCK 和EINPROGRESS 事件的新机制。
noPoll 是一个 WebSocket 的开源实现,使用 ANSI C 编写,可用于构建纯 WebSocket 解决方案和为已有的面向 TCP 的应用程序提供 WebSocket 支持。
https://dolphin.aspl.es/svn/publico/nopoll/
Wslay
Wslay 是一个用 C 语言实现的 WebSocket 开发库。实现了 RFC 6455 中描述的第 13 版本的协议。提供了基于事件的 API 和基于帧的底层 API。特别适合非堵塞的 reactor 模式风格应用。可在不同的事件中设置回调。Wslay 只支持 WebSocket 协议的数据传输部分,不执行 HTTP 的握手过程。
https://tatsuhiro-t.github.io/wslay/
https://github.com/tatsuhiro-t/wslay
不过这两种库使用起来还是很不方便,在codeforge 和 github上写的还是很精致易用。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。