美文网首页
webSocket入门到呕吐

webSocket入门到呕吐

作者: 孟烦了的爱豆 | 来源:发表于2018-01-18 15:39 被阅读32次
    诗和远方~

    简介

    • WebSocket是什么?

    WebSocket协议是基于TCP的一种新的网络协议。它实现了浏览器与服务器全双工(full-duplex)通信——允许服务器主动发送信息给客户端。

    • 产生背景

    因为 HTTP 协议有一个缺陷:通信只能由客户端发起。
    举例来说,我们想了解今天的天气,只能是客户端向服务器发出请求,服务器返回查询结果。HTTP 协议做不到服务器主动向客户端推送信息。
    这种单向请求的特点,注定了如果服务器有连续的状态变化,客户端要获知就非常麻烦。我们只能使用"轮询":每隔一段时候,就发出一个询问,了解服务器有没有新的信息。最典型的场景就是聊天室。
    轮询的效率低,非常浪费资源(因为必须不停连接,或者 HTTP 连接始终打开)。因此,工程师们一直在思考,有没有更好的方法。WebSocket 就是这样发明的。

    • 特点
    1. 服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送技术的一种。
    2. 建立在 TCP 协议之上,服务器端的实现比较容易。
    3. 与 HTTP 协议有着良好的兼容性。默认端口也是80和443,并且握手阶段采用 HTTP 协议,因此握手时不容易屏蔽,能通过各种 HTTP 代理服务器。
    4. 数据格式比较轻量,性能开销小,通信高效。
    5. 可以发送文本,也可以发送二进制数据。
    6. 没有同源限制,客户端可以与任意服务器通信。
    7. 协议标识符是ws(如果加密,则为wss),服务器网址就是 URL。
    'ws://10.96.9.50:17653/CVWS'
    
    示例

    客户端的简单案例

    <!DOCTYPE HTML>
    <html>
    <head>
        <meta http-equiv="content-type" content="text/html" />
        <meta name="author" content="https://www.baidu.com" />
        <title>websocket test</title>
        <script>
            var socket;
            function Connect(){
                try{
                   socket=new WebSocket('ws://10.96.9.50:17653/CVWS');
                }catch(e){
                    alert('error');
                    return;
                }
                socket.onopen = sOpen;
                socket.onerror = sError;
                socket.onmessage= sMessage;
                socket.onclose= sClose;
            }
            function sOpen(){
                alert('connect success!');
            }
            function sError(e){
                alert("error " + e);
            }
            function sMessage(msg){
                alert('server says:' + msg);
            }
            function sClose(e){
                alert("connect closed:" + e.code);
            }
            function Send(){
                socket.send(document.getElementById("msg").value);
            }
            function Close(){
                socket.close();
            }
        </script>
    </head>
    <body>
    <input id="msg" type="text">
    <button id="connect" onclick="Connect();">Connect</button>
    <button id="send" onclick="Send();">Send</button>
    <button id="close" onclick="Close();">Close</button>
    </body>
    </html>
    

    客户端的API

    • WebSocket 构造函数

    WebSocket 对象作为一个构造函数,用于新建 WebSocket 实例。

    var ws = new WebSocket('ws://localhost:8080');
    

    执行上面语句之后,客户端就会与服务器进行连接。

    实例对象的所有属性和方法清单,参见这里

    • webSocket.onopen

    实例对象的onopen属性,用于指定连接成功后的回调函数。

    ws.onopen = function () {
      ws.send('Hello!');
    }
    

    如果要指定多个回调函数,可以使用addEventListener方法。

    ws.addEventListener('open', function (event) {
      ws.send('Hello Server!');
    });
    
    • webSocket.onclose

    实例对象的onclose属性,用于指定连接关闭后的回调函数。

    ws.onclose = function(event) {
      var code = event.code;
      var reason = event.reason;
      var wasClean = event.wasClean;
      // handle close event
    };
    
    ws.addEventListener("close", function(event) {
      var code = event.code;
      var reason = event.reason;
      var wasClean = event.wasClean;
      // handle close event
    });
    
    • webSocket.onmessage

    实例对象的onmessage属性,用于指定收到服务器数据后的回调函数。

    ws.onmessage = function(event) {
      var data = event.data;
      // 处理数据
    };
    
    ws.addEventListener("message", function(event) {
      var data = event.data;
      // 处理数据
    });
    

    声明:部分内容从网络获取,如有侵权行为,请与作者联系,作者将于2日内删除。

    相关文章

      网友评论

          本文标题:webSocket入门到呕吐

          本文链接:https://www.haomeiwen.com/subject/bkkwoxtx.html