如何用JS WebSocket实现简单聊天

下面详细讲解如何用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日

相关文章

  • ES6学习笔记之正则表达式和字符串正则方法分析

    ES6学习笔记之正则表达式和字符串正则方法分析 正则表达式概述 正则表达式是处理字符串的强大工具,它是一个特殊的文本字符串,对于需要进行字符串匹配、搜索、替换等操作的场景,使用正则表达式会更加高效、便捷。 正则表达式由普通字符(如数字、字母等)和元字符(如.、*、+等)构成,它们可以组成匹配规则,可以精确地匹配某些字符或者模式。 字符串正则方法 字符串正则方…

    JavaScript 2023年6月10日
    00
  • JavaScript new对象的四个过程实例浅析

    JavaScript new对象的四个过程实例浅析 在JavaScript中,使用new关键字可以创建一个对象。但是,创建对象并不是一件简单的事情,它会涉及到四个过程,本文将详细讲解这四个过程以及示例分析。 1、创建对象 当使用new关键字创建一个对象时,JavaScript会在内存中为该对象分配空间。这个空间会保存该对象的所有属性和方法。我们先来看一个简单…

    JavaScript 2023年5月27日
    00
  • JavaScript属性操作

    JavaScript属性操作 在JavaScript中,我们可以使用属性来表示对象的特征及状态。属性操作是常见的JavaScript编程任务,涉及到访问、设置、删除属性等任务。本文将介绍JavaScript属性操作的基本知识以及几个例子。 访问属性 我们可以使用点号或方括号来访问JavaScript对象的属性。点号方式是JavaScript语法中更常用的一种…

    JavaScript 2023年5月18日
    00
  • Javascript 更新 JavaScript 数组的 uniq 方法

    下面是更新 JavaScript 数组的 uniq 方法的完整攻略: 1. 现状 目前,虽然 JavaScript 数组已有现成的 filter 函数可以用来过滤数组中重复的元素,但很多开发者经常需要自定义数组的 uniq 方法,以实现更加灵活的去重操作。目前,常见的去重实现方式有两种:基于 Set 对象的去重和基于对象属性的去重,其中基于 Set 的去重是…

    JavaScript 2023年5月27日
    00
  • JS实现判断两个日期不能跨年和跨月

    要判断两个日期是否跨年或者跨月,需要将日期转换为时间戳(以毫秒为单位),然后进行比较。 以下是实现判断两个日期是否跨年或者跨月的完整攻略: 步骤一:将日期转换为时间戳 首先需要将需要比较的两个日期都转换为时间戳,可以使用Date对象的getTime()方法来实现。 let date1 = new Date(‘2022-10-01’); let date2 =…

    JavaScript 2023年6月10日
    00
  • JavaScript入门之语言基础第1/2页

    下面是《JavaScript入门之语言基础第1/2页》的完整攻略: 简介 本篇教程讲解的是 JavaScript 语言的基础知识,包括数据类型、运算符、变量等概念,是 JavaScript 入门的必备知识。同时,本篇教程提供了一些示例来帮助读者更好地理解这些概念。 数据类型 JavaScript 中有六种基本数据类型,分别为: Number:数字类型,包括整…

    JavaScript 2023年5月17日
    00
  • JavaScript判断日期时间差的实例代码

    下面就是详细讲解“JavaScript判断日期时间差的实例代码”的完整攻略。 标准日期格式 在讲解实例代码之前,需要先了解一下JavaScript中的日期对象及其标准格式。 JavaScript中的日期对象可以使用new Date()来创建,该对象包含了当前日期和时间的相关信息。同时,JavaScript也提供了标准日期格式,如下所示: YYYY-MM-DD…

    JavaScript 2023年5月27日
    00
  • Google 爬虫如何抓取 JavaScript 的内容

    当Google爬虫(Googlebot)抓取网站时,它可以执行JavaScript并抓取动态生成的内容。然而,有些情况下担心Googlebot无法正确地执行JavaScript。在这里,我们详细讲解如何让Google爬虫成功抓取JavaScript内容。 确保JavaScript没有错误 Googlebot可以执行JavaScript并抓取动态生成的内容,但…

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