如何用JS WebSocket实现简单聊天

yizhihongxing

下面详细讲解如何用JS WebSocket实现简单聊天的完整攻略:

什么是WebSocket?

WebSocket是HTML5提出的一种应用层协议,它是HTML5新引入的特性,使得浏览器和Web服务器之间可以进行双向通信,而不需要通过轮询的方式模拟实现。WebSocket协议通过一次 HTTP 握手,然后交换数据。

如何使用WebSocket实现简单的聊天?

WebSocket提供了用于在客户端(如浏览器)和服务器之间进行全双工通信的API。使用WebSocket实现简单聊天的步骤如下:

  1. 创建WebSocket

通过JavaScript中的WebSocket构造函数,创建WebSocket对象。代码如下:

const ws = new WebSocket('ws://localhost:3000');
  1. 监听WebSocket的事件:open、message和close

WebSocket对象有三个重要的事件:open、message和close。当WebSocket连接成功后,触发open事件;当接收到服务端发送的消息时,触发message事件;当WebSocket连接关闭时,触发close事件。通过监听这三个事件,我们可以完成双向通信。

const ws = new WebSocket('ws://localhost:3000');

// WebSocket连接成功事件
ws.addEventListener('open', (event) => {
  console.log('WebSocket连接成功!');
});

// 接收到服务端发送消息事件
ws.addEventListener('message', (event) => {
  console.log('接收到服务端发送的消息:', event.data);
});

// WebSocket连接关闭事件
ws.addEventListener('close', (event) => {
  console.log('WebSocket连接关闭!');
});
  1. 发送消息到服务端

通过WebSocket对象的send()方法发送消息到服务端。

const ws = new WebSocket('ws://localhost:3000');

ws.addEventListener('open', (event) => {
  console.log('WebSocket连接成功!');

  // 发送消息到服务端
  ws.send('Hello Server!');
});
  1. 从服务端接收消息

当接收到服务端发送的消息时,触发message事件。可以通过监听这个事件,将接收到的消息显示在页面上。

const ws = new WebSocket('ws://localhost:3000');

ws.addEventListener('open', (event) => {
  console.log('WebSocket连接成功!');

  ws.send('Hello Server!');
});

// 将接收到的消息显示在页面上
ws.addEventListener('message', (event) => {
  const message = event.data;
  const li = document.createElement('li');
  li.innerText = message;
  document.querySelector('#messages').appendChild(li);
});

以上是使用WebSocket实现简单聊天的基本步骤,下面给出一个完整的示例供参考。

示例1:使用WebSocket和Node.js实现简单聊天

前端代码:

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>WebSocket简单聊天</title>
</head>
<body>
  <ul id="messages"></ul>
  <form action="">
    <input id="input" type="text" autocomplete="off">
    <button>发送</button>
  </form>

  <script>
    const ws = new WebSocket('ws://localhost:3000');

    ws.addEventListener('open', (event) => {
      console.log('WebSocket连接成功!');
    });

    // 将接收到的消息显示在页面上
    ws.addEventListener('message', (event) => {
      const message = event.data;
      const li = document.createElement('li');
      li.innerText = message;
      document.querySelector('#messages').appendChild(li);
    });

    // 发送消息到服务端
    const form = document.querySelector('form');
    form.addEventListener('submit', (event) => {
      event.preventDefault(); // 阻止表单默认跳转行为
      const input = document.querySelector('#input');
      const message = input.value;
      input.value = ''; // 清空输入框
      ws.send(message);
    });
  </script>
</body>
</html>

后端代码(使用Node.js和WebSocket库):

const WebSocket = require('ws');
const wss = new WebSocket.Server({ port: 3000 });

wss.on('connection', (ws) => {
  console.log('WebSocket连接成功!');

  // 接收到客户端发送的消息
  ws.on('message', (message) => {
    console.log('接收到客户端发送的消息:', message);

    // 将消息广播给所有客户端
    wss.clients.forEach((client) => {
      if (client.readyState === WebSocket.OPEN) {
        client.send(message);
      }
    });
  });

  // WebSocket连接关闭
  ws.on('close', () => {
    console.log('WebSocket连接关闭!');
  });
});

此示例中,前端和后端使用WebSocket库进行通信,前端页面包含一个输入框和一个发送按钮,用户输入消息后点击发送按钮即可将消息发送到后端,后端收到消息后再将消息广播给所有客户端。

示例2:使用WebSocket和PHP实现简单聊天

前端代码:

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>WebSocket简单聊天</title>
</head>
<body>
  <ul id="messages"></ul>
  <form action="">
    <input id="input" type="text" autocomplete="off">
    <button>发送</button>
  </form>

  <script>
    const ws = new WebSocket('ws://localhost:3000');

    ws.addEventListener('open', (event) => {
      console.log('WebSocket连接成功!');
    });

    // 将接收到的消息显示在页面上
    ws.addEventListener('message', (event) => {
      const message = event.data;
      const li = document.createElement('li');
      li.innerText = message;
      document.querySelector('#messages').appendChild(li);
    });

    // 发送消息到服务端
    const form = document.querySelector('form');
    form.addEventListener('submit', (event) => {
      event.preventDefault(); // 阻止表单默认跳转行为
      const input = document.querySelector('#input');
      const message = input.value;
      input.value = ''; // 清空输入框
      ws.send(message);
    });
  </script>
</body>
</html>

后端代码(使用PHP和Ratchet库):

require __DIR__ . '/vendor/autoload.php';

use Ratchet\MessageComponentInterface;
use Ratchet\ConnectionInterface;
use Ratchet\Http\HttpServer;
use Ratchet\WebSocket\WsServer;
use Ratchet\Server\IoServer;

class Chat implements MessageComponentInterface {
  protected $clients;

  public function __construct() {
    $this->clients = new \SplObjectStorage;
  }

  public function onOpen(ConnectionInterface $conn) {
    echo "WebSocket连接成功!\n";
    $this->clients->attach($conn);
  }

  public function onMessage(ConnectionInterface $from, $msg) {
    echo "接收到客户端发送的消息: $msg\n";
    foreach ($this->clients as $client) {
      if ($from !== $client) {
        $client->send($msg);
      }
    }
  }

  public function onClose(ConnectionInterface $conn) {
    echo "WebSocket连接关闭!\n";
    $this->clients->detach($conn);
  }

  public function onError(ConnectionInterface $conn, Exception $e) {
    echo "出错了: {$e->getMessage()}\n";
    $conn->close();
  }
}

$server = IoServer::factory(
  new HttpServer(
    new WsServer(
      new Chat()
    )
  ),
  3000
);

$server->run();

此示例中,前端和后端使用Ratchet库进行通信,前端页面和示例1相同,只是后端代码使用了PHP代替Node.js。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:如何用JS WebSocket实现简单聊天 - Python技术站

(0)
上一篇 2023年6月11日
下一篇 2023年6月11日

相关文章

  • Express框架req res对象使用详解

    下面是关于“Express框架req res对象使用详解”的完整攻略。 1. HTTP请求(req)对象 Express框架提供了一个request对象(通常缩写为 req),作为每个请求的入口点,它包含了HTTP请求的属性和方法。 1.1 请求路径 req.path属性可用于获取请求的路径,例如: app.get(‘/users/:id’, functio…

    JavaScript 2023年6月11日
    00
  • JS中取二维数组中最大值的方法汇总

    当我们需要在 JavaScript 中取二维数组中的最大值时,可能会遇到一些问题。下面我为大家详细讲解 JS 中取二维数组中最大值的方法汇总。 方法一:使用双重循环 这种方法比较直观,可以使用双重循环遍历整个二维数组,然后找到其中最大值。 function findMaxIn2DArray(arr) { let max = arr[0][0]; for (l…

    JavaScript 2023年5月27日
    00
  • 利用AjaxSubmit()方法实现Form提交表单后回调功能

    要实现Form提交表单后回调功能,我们可以使用jQuery中的AjaxSubmit()方法。这个方法可以使用ajax方式提交表单,而且可以在提交表单后回调函数中处理返回的数据。 下面是实现的详细步骤: 1.引用jQuery库和jQuery.form插件。 <script src="https://cdnjs.cloudflare.com/aj…

    JavaScript 2023年6月10日
    00
  • js制作带有遮罩弹出层实现登录注册表单特效代码分享

    下面将详细讲解实现“JS制作带有遮罩弹出层实现登录注册表单特效”的完整攻略。 1.制作遮罩弹出层 要实现带有遮罩弹出层的效果,首先需要制作一个遮罩层和一个弹出层。 遮罩层 遮罩层是为了使背景页面不可操作以及页面内容有一定的透明度,使用 position: fixed 定位方式,铺满整个页面,且设置 z-index 层级高于其他层级。 遮罩层代码如下: .ov…

    JavaScript 2023年6月10日
    00
  • Javascript 八进制转义字符(8进制)

    Javascript 八进制转义字符是一种用于表示ASCII码表中特殊字符的编码方式。其使用八进制数来表示对应的ASCII码。在Javascript中,八进制转义字符的格式为”\oxx”,其中xx为两个八进制数字。下面是Javascript中常用的八进制转义字符及其对应的ASCII码: 八进制转义字符 ASCII码 \000 NUL \011 HT \012…

    JavaScript 2023年5月19日
    00
  • 小发现之浅谈location.search与location.hash的问题

    标题:小发现之浅谈location.search与location.hash的问题 背景介绍 location.search与location.hash是前端开发中常用的两个属性,它们分别用于获取当前url中带的查询参数和锚点参数。这两个属性的使用方式不同,而且在某些情况下会出现一些问题,需要特别注意。 location.search与location.ha…

    JavaScript 2023年6月11日
    00
  • JS操作xml对象转换为Json对象示例

    下面是JS操作XML对象转换为JSON对象示例的完整攻略。 什么是XML对象和JSON对象? XML(Extensible Markup Language) 是一种文本格式的标记语言,用于存储和传输数据。XML 文件可作为 Web 文档来读取和呈现。 JSON(JavaScript Object Notation) 是一种轻量级的数据格式,它是一种文本格式的…

    JavaScript 2023年5月27日
    00
  • JavaScript制作简单的框选图表

    下面我来详细讲解一下如何使用JavaScript制作简单的框选图表。 1. 确定布局 首先,我们需要在HTML中确定图表的布局。可以使用<canvas>元素来绘制我们的图表,可以设置其宽度和高度,例如: <canvas id="myChart" width="600" height="400…

    JavaScript 2023年6月10日
    00
合作推广
合作推广
分享本页
返回顶部