WebSocket是一种协议

简介: WebSocket,并非HTML 5独有,WebSocket是一种协议。只是在handshake的时候,发送的链接信息头和HTTP相似。HTML 5只是实现了WebSocket的客户端。

        WebSocket,并非HTML 5独有,WebSocket是一种协议。只是在handshake的时候,发送的链接信息头和HTTP相似。HTML 5只是实现了WebSocket的客户端。其实,难点在于服务端,服务端相对还是比较复杂的。

 WebSocket 学习体会

        网上demo很多,但是能讲到点上的不多,而且也不知道作者有没有深入试验过。WebSokect协议 ,handshake这part其实还是比较简单的,比较复杂的还是数据传输(第二部分)比较难。

 WebSocket 学习体会

        上图是帧格式,对于解释可以看文档也可以查看文章:http://www.cnblogs.com/imayi/archive/2012/05/05/2485343.html

 

        也就说,你需要解读opcode, Payload len 这些比较敏感的位值之后,你才开始取后面的Payload Data, 比如opcode如果是1,那么就是读取字符串,如果是2,那么就是读取流。

        如果自己用java做服务端,握手协议的响应,换行符不能使“\r\n”或“\n”,因为这不是标准的换行符,其实是个字符串,只是屏幕显示的时候是换行,可以用PrintWrite.println(),或者

String newLine = (String) java.security.AccessController.doPrivileged(

              new sun.security.action.GetPropertyAction("line.separator"));

        握手之后,根据opcode做相应的操作,JAVA的IO和NIO,在实现方面都缺憾,难以实现。使用IO的话,在获得socket之 后,InputStream会处于阻塞,因为阻塞,所以后续做outputStream的操作时就会不方便。NIO的话,是SocketChannel写 入读出,基本都是ByteBuffer,用这个的话,有时opcode值为1(读取字符串),ByteBuffer解码得到的字符串经常性是乱码。感觉最 好还是学Tomcat,自己重写一下InputStream。

    Tomcat在7.0.27之后就开始支持WebSocket,在它之上建立WebSocket是很简单的,基本就是继承 WebSocketServlet,实现createWebSocketInbound方法和重写StreamInbound的方法。Tomcat的 example里面有相关的例子。

    Tomcat处理流程,WebSocketServlet本身就继承了HttpServlet,重写doGet方法,在doGet方法里面做了 handshake的操作,之后就是一些UpgradeInbound的操作,做好接收数据流的准备(StreamInbound提供了onData方 法)。每次数据过来,都会执行onData里面的WsFrame frame = wsIs.nextFrame(true); 对数据帧进行分析,并且提供自定义InputStream流,调用用户重写的onBinaryData或者onTextData方法,将输入流里面的数据 读出,再response给客户端。

 WebSocketServlet(doGet) -> handshake ->  createWebSocketInbound  ->  doUpgrade  -> setUpgradeProcessor -> 

onUpgradeComplete  -> onData -> 数据过来 -> wsIs.nextFrame(true)  ->  生成自定义InputStream -> 调用用户重写方法  (另外如果opcode是关闭Socket,也会有相应的操作)

http://www.open-open.com/lib/view/open1344582940452.html

 

相关文章
|
3月前
|
网络协议 数据处理
WebSocket协议基础
WebSocket协议基础
34 0
|
3月前
|
XML 存储 网络协议
tcp支持浏览器websocket协议
tcp支持浏览器websocket协议
|
6月前
|
缓存 移动开发 网络协议
WebSocket 协议原理抓包分析
WebSocket 协议原理抓包分析
266 0
|
3月前
|
移动开发 缓存 网络协议
Websocket协议原理及Ws服务器代码实现
Websocket协议原理及Ws服务器代码实现
|
7月前
|
网络协议
百度搜索:蓝易云【websocket和http有什么不同?以及websocket协议如何实现?】
WebSocket和HTTP协议是两种不同的协议,它们在协议设计上有着显著的区别。
61 0
|
3月前
|
网络协议 C++ 数据格式
websocket协议介绍与基于reactor模型的websocket服务器实现
websocket协议介绍与基于reactor模型的websocket服务器实现
55 0
|
2月前
|
前端开发 网络协议 JavaScript
|
3月前
|
网络协议 Linux C++
Linux C/C++ websocket协议与服务器实现
Linux C/C++ websocket协议与服务器实现
65 0
|
9月前
|
存储 数据安全/隐私保护
Netty实战(十三)WebSocket协议(一)
WebSocket 协议是完全重新设计的协议,旨在为 Web 上的双向数据传输问题提供一个切实可行的解决方案,使得客户端和服务器之间可以在任意时刻传输消息,因此,这也就要求它们异步地处理消息回执。
162 0
|
9月前
|
移动开发 监控 网络协议
基于Socket通讯(C#)和WebSocket协议(net)编写的两种聊天功能(文末附源码下载地址)
基于Socket通讯(C#)和WebSocket协议(net)编写的两种聊天功能(文末附源码下载地址)