Websocket通讯简析

  • 什么是Websocket

  • Websocket是一种全新的协议,不属于HTTP无状态协议,协议名为"ws",这意味着一个Websocket连接地址会是这样的写法:ws://**。
    Websocket协议本质上是一个基于TCP的协议。建立连接需要握手,客户端(浏览器)首先向服务器(web server)发起一条特殊的HTTP请求,web server解析后生成应答到浏览器,这样子一个Websocket连接就建立了,直到某一方关闭连接。

    1. Client try to connect to WebSocket server
    2. Server recognize client
    3. If client is not registered with server then add client (this is known as handshaking process which is based on headers transmission)
    4. Send and receive data
    5. Close connection

     

    • WebScoket数据帧

    WebScoket协议中,数据以帧序列的形式传输,具体的协议标准可以参考rfc6455。
    (1)客户端向服务器传输的数据帧必须进行掩码处理:服务器若接收到未经过掩码处理的数据帧,则必须主动关闭连接。
    (2)服务器向客户端传输的数据帧一定不能进行掩码处理。客户端若接收到经过掩码处理的数据帧,则必须主动关闭连接。
    针对上情况,发现错误的一方可向对方发送close帧(状态码是1002,表示协议错误),以关闭连接。

     

    • 客户端API

    <!DOCTYPE HTML>
    <html>
        <head>
            <script type="text/javascript">
                function WebSocketTest() {
                    if ("WebSocket" in window) {
                        alert("WebSocket is supported by your Browser!");
                        // Let us open a web socket
                        var ws = new WebSocket("ws://localhost:9998/echo");
                        ws.onopen = function () {
                            // Web Socket is connected, send data using send()
                            ws.send("Message to send");
                            alert("Message is sent...");
                        };
                        ws.onmessage = function (evt) {
                            var received_msg = evt.data;
                            alert("Message is received...");
                        };
                        ws.onclose = function () {
                            // websocket is closed.
                            alert("Connection is closed...");
                        };
                    } else {
                        // The browser doesn't support WebSocket
                        alert("WebSocket NOT supported by your Browser!");
                    }
                }
            </script>
        </head>
        <body>
            <div id="sse">
                <a href="javascript:WebSocketTest()">Run WebSocket</a>
            </div>
        </body>
    </html>

     

    • 服务器端

    各种语言类型的开源的Websocket Server都可以在网上找到。

    例如Java的Spring WebSocket:https://github.com/search?utf8=%E2%9C%93&q=Spring+WebSocket

    c语言:

    https://github.com/gaccob/gbase/blob/master/net/wsconn.h

    https://github.com/gaccob/gbase/blob/master/net/wsconn.c

     

    • 浏览器支持

    image

     

    • 参考文章

    http://www.qixing318.com/article/643129914.html

    http://zengrong.net/post/2199.htm

    http://zh.wikipedia.org/wiki/WebSocket

    http://www.ibm.com/developerworks/cn/web/1112_huangxa_websocket/

    http://blog.csdn.net/fenglibing/article/details/7100070

    http://www.cnblogs.com/caosiyang/archive/2012/08/14/2637721.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值