返回 导航

HTML5 / CSS3

hangge.com

HTML5 - Web Socket使用详解(附样例)

作者:hangge | 2017-07-18 08:10

一、Web Socket 标准

1,基本介绍

(1)根据 Web Socket 标准,浏览器能够保持对 Web 服务器打开的连接,从而与服务器长时间进行交换数据。
(2)利用 Web Socket 我们可以开发许多特殊的应用,比如聊天室、大型多人游戏,或者端到端的协作工具。

2,兼容性

(1)桌面浏览器
  • Chrome:完美支持
  • Firefox:完美支持
  • SafariSafary 7 起支持
  • IEIE10 起支持(包括后面的 Edge 也支持)
  • Opera:完美支持

(2)移动设备
  • iOSiOS 6.1 起支持
  • AndroidAndorid 4.4 起支持

3,测试当前浏览器是否支持

由于电脑网络设置的限制、防火墙或者杀毒软件等各种因素的影响。即使是在支持 Web Socket 的浏览器上运行也有可能出现问题。
如果不确定当前电脑是否能使用 Web Socket,可以访问这个网站测试一下:http://websocketstest.com/

访问后网站会尝试连接一个测试服务器,并且生成一个报告告诉你 Web Socket 是否在运行。

二、Web Socket 服务器

1,现成的 Web Socket 服务 url

本文主要演示 HTML5 Web Socket 客户端实现,服务端这里就使用现成的第三方服务器,地址如下:
这个服务器功能很简单,就是我们向它发送消息,它会再返回同样的消息。

2,Web Socket 测试页面

它还提供了一个简单的在线测试页面:http://www.websocket.org/echo.html
填上 Web Socket 地址进行连接后,就可以发送和接收数据消息了。

三、实现 Web Socket 客户端

1,实现步骤

(1)首先我们要创建 WebSocket 对象,传入一个 URLURL ws:// 开头,表示 Web Socket 连接协议。当然该 URL 仍然指向服务器上的一个 Web 应用(比如指向一个 php 脚本)
var socket = new WebSocket("ws://hangge.com/server.php");

注意:Web Socket 标准还支持以 wss:// 开头的 URL,表示安全、加密的连接(类似于请求网页时使用的 https:// http:// 之间的关系)

(2)创建 WebSocket 对象后,页面就会尝试连接服务器。我们可以通过如下 4 个事件来处理消息业务:
  • onOpen:在建立连接后触发
  • onError:在出现问题时触发
  • onMessage:在页面从服务器接收到消息时触发
  • onClose:连接关闭时触发

(3)连接成功后,我们可以使用 WebSocket 对象的 send() 方法向服务器发送消息。使用 close() 方法关闭连接。

(4)WebSocket 对象还有个 readyState 属性,我们可以通过它的值来判断当前的 socket 状态:
  • 0:连接还没建立
  • 1:打开且准备就绪
  • 2:关闭过程中
  • 3:已关闭

2,效果图

(1)页面打开后会自动连接服务器。
(2)输入框填写内容后点击“发送”按钮,即可将内服发送到服务端。
(3)下方区域会实时显示出发送和接收的消息,以及连接情况。
(4)点击“断开”按钮,即可关闭与服务器的连接。

3,样例代码

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>hangge.com</title>
    <style>
    </style>
    <script type="text/javascript">
      //用于填写发送消息的输入框
      var messageBox;
      //用于显示消息的div容器
      var messageLog;
      //WebSocket对象
      var socket;

      //页面加载完毕
      window.onload = function() {
        messageBox = document.getElementById('messageBox');
        messageLog = document.getElementById('messageLog');
        connect();
      }

      //创建socket对象并绑定所有事件
      function connect() {
        //创建socket对象
        socket = new WebSocket("ws://echo.websocket.org");

        //监听所有的Web socket事件
        socket.onopen = connectionOpen;
        socket.onmessage = messageReceived;
        socket.onerror = errorOccurred;
        socket.onclose = connectionClosed;
      }

      //断开连接按钮点击
      function disconnect(){
        socket.close();
      }

      //发送消息按钮点击
      function sendMessage(){
        //获取要发送的数据
        var message = messageBox.value;

        //通过socket发送消息
        socket.send(message);

        //告诉用户刚刚发生了什么
        messageLog.innerHTML += "<br>发送:" + message;
      }

      //连接建立完毕事件响应
      function connectionOpen(e) {
        messageLog.innerHTML += "<br>--- Socket连接成功 ---";
      }

      //消息接收事件响应
      function messageReceived(e){
        messageLog.innerHTML += "<br>收到:" + e.data;
      }

      //错误事件响应
      function errorOccurred(e){
        messageLog.innerHTML += "<br>发生错误:" + e.data;
      }

      //连接关闭事件响应
      function connectionClosed(e) {
        messageLog.innerHTML += "<br>--- Socket连接关闭 ---";
      }
    </script>
  </head>
  <body>
    <input id="messageBox" type="text" />
    <button onclick="sendMessage()">发送</button>
    <button onclick="disconnect()">断开</button>
    <div id="messageLog"></div>
  </body>
</html>
评论

全部评论(0)

回到顶部