沃梦达 / IT编程 / 前端开发 / 正文

html5的websockets全双工通信详解学习示例

HTML5的WebSockets全双工通信是一种全新的实时通信协议。它允许在浏览器和服务器之间建立一个持久的、低延迟的双向通道,以实现实时数据的推送和交换。在这里,我们将讲解WebSockets的使用方法,介绍一些WebSockets的基本概念和语法,并且提供一些实例说明,以方便大家更好地理解和使用WebSockets。

WebSockets基本概念和语法

WebSockets是一种基于TCP协议的全双工通信协议,由IETF标准化工作组制定标准。WebSockets协议本质上就是一个普通的HTTP请求,只是在握手之后,请求和响应变成了双向的二进制帧数据的传输。下面是WebSockets的基本语法:

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

ws.onopen = function() {
  console.log("WebSocket连接已经建立");
};

ws.onmessage = function(evt) {
  console.log("收到消息: " + evt.data);
};

ws.onclose = function() {
  console.log("WebSocket连接已经关闭");
};

ws.onerror = function(evt) {
  console.log("WebSocket连接发生错误: " + evt);
};

ws.send("Hello, WebSocket!");

以上是WebSockets的基本语法,可以通过new WebSocket(url)方法创建一个WebSocket连接,然后通过WebSocket对象的onopen、onmessage、onclose、onerror等事件来处理连接的建立、消息的接收、连接的关闭以及错误的处理。最后,可以通过WebSocket对象的send()方法向WebSockets服务器发送消息。

WebSockets使用方式

下面是一个简单的WebSockets示例:
1. 首先,创建一个HTML页面,并在页面上添加一个按钮和一个文本框;

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>WebSockets示例</title>
</head>
<body>
    <button id="connectBtn">连接服务器</button>
    <input type="text" id="messageInput">
    <button id="sendBtn">发送消息</button>
    <script type="text/javascript">
        // TODO: 添加WebSockets代码
    </script>
</body>
</html>
  1. 接着,在页面底部添加以下的JavaScript代码:
var ws;

document.getElementById("connectBtn").addEventListener("click", function() {
  ws = new WebSocket("ws://localhost:8080/ws");

  ws.onopen = function() {
    console.log("WebSocket连接已经建立");
  };

  ws.onmessage = function(evt) {
    console.log("收到消息: " + evt.data);
  };

  ws.onclose = function() {
    console.log("WebSocket连接已经关闭");
  };

  ws.onerror = function(evt) {
    console.log("WebSocket连接发生错误: " + evt);
  };
});

document.getElementById("sendBtn").addEventListener("click", function() {
  var messageInput = document.getElementById("messageInput");
  ws.send(messageInput.value);
  messageInput.value = "";
});

上面的代码通过事件监听,实现了按钮的点击与WebSocket的连接、消息的发送等功能。当按钮被点击时,创建一个WebSocket连接,当WebSocket建立之后,建立onopen、onmessage、onclose、onerror等WebSocket事件。同时,还实现了一个发送消息的按钮,当该按钮被点击时,向建立的WebSocket连接发送一条消息。

WebSockets示例说明之实现一个在线聊天室

以下是一个实现在线聊天室功能的WebSockets示例。实现的功能包括:
1. 用户输入昵称进入聊天室;
2. 用户可以与其他用户实时聊天;
3. 用户离开聊天室时从聊天室中删除。

具体的实现过程如下:

  1. 首先,创建一个HTML页面,并在页面上添加以下DOM元素:
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>WebSockets在线聊天室</title>
</head>
<body>
    <form>
        <input type="text" id="name" placeholder="请输入昵称">
        <button type="submit" id="join">进入聊天室</button>
    </form>

    <div id="chatRoom" style="display:none">
        <ul id="messageList"></ul>
        <form>
            <input type="text" id="message" placeholder="请输入聊天内容" style="width:80%">
            <button type="submit" id="send">发送</button>
        </form>
    </div>

    <script type="text/javascript">
        // TODO:添加WebSockets代码
    </script>
</body>
</html>
  1. 接着,在页面底部添加以下的JavaScript代码:
var ws;
var nickname;

document.getElementById("join").addEventListener("click", function(event) {
  event.preventDefault();

  // 连接WebSocket服务器
  ws = new WebSocket("ws://localhost:8080/ws");

  ws.onopen = function() {
    console.log("WebSocket连接已经建立");
    nickname = document.getElementById("name").value;

    // 向服务器发送用户进入聊天室的消息
    ws.send(JSON.stringify({action:"join", nickname:nickname}));

    // 显示聊天室界面
    document.getElementById("chatRoom").style.display = "block";
    document.getElementById("name").style.display = "none";
    document.getElementById("join").style.display = "none";
  };

  ws.onmessage = function(evt) {
    var message = JSON.parse(evt.data);

    switch (message.action) {
      case "join":
        // 新用户进入聊天室,添加提示信息
        var li = document.createElement("li");
        li.innerHTML = message.nickname + " 进入聊天室";
        document.getElementById("messageList").appendChild(li);
        break;
      case "message":
        // 接收到用户发送的聊天消息,添加到聊天室中
        var li = document.createElement("li");
        li.innerHTML = "<span>" + message.nickname + ":</span> " + message.text;
        document.getElementById("messageList").appendChild(li);
        break;
      case "leave":
        // 用户离开聊天室,添加提示信息
        var li = document.createElement("li");
        li.innerHTML = message.nickname + " 离开聊天室";
        document.getElementById("messageList").appendChild(li);
        break;
    }
  };

  ws.onclose = function() {
    console.log("WebSocket连接已经关闭");
  };

  ws.onerror = function(evt) {
    console.log("WebSocket连接发生错误: " + evt);
  };
});

document.getElementById("send").addEventListener("click", function(event) {
  event.preventDefault();

  var messageInput = document.getElementById("message");
  var message = messageInput.value;

  // 向服务器发送聊天消息
  ws.send(JSON.stringify({action:"message", nickname:nickname, text:message}));

  messageInput.value = "";
});

window.onbeforeunload = function() {
  // 向服务器发送用户离开聊天室的消息
  ws.send(JSON.stringify({action:"leave", nickname:nickname}));
};

上面的代码通过事件监听实现了聊天室的实时消息交换功能。对于新用户进入聊天室、用户发送聊天消息、用户离开聊天室等操作,通过WebSockets向服务器发送相应的消息并接收消息进行处理。最后,将处理后的消息添加到界面中进行展示。

以上是HTML5的WebSockets全双工通信的攻略,介绍了WebSockets的基本概念和语法、WebSockets的使用方式和两个WebSockets示例,并且详细讲解了实现在线聊天室的具体步骤。希望对大家有所帮助。

本文标题为:html5的websockets全双工通信详解学习示例