如何用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日

相关文章

  • 使用 JavaScript 创建并下载文件(模拟点击)

    使用 JavaScript 可以很方便地创建并下载文件,而模拟点击则是其中一种实现方式。以下是一个完整的攻略,涵盖了实现方法、示例说明以及注意事项。 实现方法 创建用于下载的数据 首先需要创建一个用于下载的数据,可以是文本、二进制数据或者图片等。以文本数据为例,可以使用以下方法创建: const data = "Hello, world!&quot…

    JavaScript 2023年5月27日
    00
  • JavaScript获取上传文件相关信息示例详解

    让我详细讲解一下“JavaScript获取上传文件相关信息示例详解”。 1. 背景介绍 在前端开发中,有时需要上传文件,比如上传图片、上传文档等。上传文件时,我们需要获取文件的相关信息,比如文件名称、文件大小、文件类型等信息。 在本文中,我们将通过两条 JavaScript 示例详细讲解如何获取上传文件的相关信息。 2. 示例1:使用FileReader对象…

    JavaScript 2023年5月27日
    00
  • JS面向对象编程实现的拖拽功能案例详解

    JS面向对象编程实现的拖拽功能案例,可以分为以下几个步骤: 1. 确定目标 首先要明确要实现的功能,即拖拽功能,定义需要拖拽的元素和拖拽的位置。 示例代码: let box = document.querySelector(‘.box’); // 需要拖拽的元素 let mouseX = 0; // 鼠标在x轴上的位置 let mouseY = 0; // …

    JavaScript 2023年5月28日
    00
  • AJAX Servlet实现数据异步交互的方法

    下面是关于“AJAX Servlet实现数据异步交互的方法”的一些完整攻略。 什么是AJAX? AJAX全称是Asynchronous JavaScript and XML(异步JavaScript和XML)。它是一种用于创建快速动态网页的技术,可以实现无需刷新页面即可更新部分页面内容的效果。AJAX可以使网页拥有更好的用户交互体验,提高网站的性能。 AJA…

    JavaScript 2023年6月11日
    00
  • JS根据浏览器窗口大小实时动态改变网页文字大小的方法

    为了实现JS根据浏览器窗口大小实时动态改变网页文字大小的效果,可以采用下面这个完整攻略: 1. 使用JavaScript监听window的resize事件 在JS代码中,可以使用window对象的resize事件来监听浏览器窗口的尺寸变化。当浏览器窗口的大小发生变化时,JS代码会自动执行相应的回调函数,从而实现网页文字大小的实时改变。 window.addE…

    JavaScript 2023年5月28日
    00
  • Document 对象的常用方法

    下面是关于 Document 对象的常用方法的详细讲解: Document 对象 Document 对象表示当前页面的文档。它是 window 对象的一个属性。可以通过 window.document 或者 document 来访问这个对象。 常用方法 以下是常用的 Document 对象方法: 1. getElementById 方法名:getElemen…

    JavaScript 2023年6月10日
    00
  • 2014值得推荐的10个移动 Web 应用程序开发框架

    2014值得推荐的10个移动 Web 应用程序开发框架 移动 Web 应用程序开发框架是一种用于开发移动应用程序,特别是移动 Web 应用程序的工具集。移动 Web 应用程序开发框架通常包括编程语言、工具和库等资源。在2014年,有很多值得推荐的移动 Web 应用程序开发框架。在这里,我们将介绍其中的10个框架和如何使用它们来开发移动 Web 应用程序。 1…

    JavaScript 2023年5月19日
    00
  • JS实现获取来自百度,Google,soso,sogou关键词的方法

    获取来自百度、Google、soso、sogou等搜索引擎的关键词,可以通过以下步骤进行: 获取referral信息: 搜索引擎会将搜索关键词作为URL参数传递给你的网站,这些参数通常是在HTTP Referrer中传递的。因此,可以通过获取HTTP Referrer来获取搜索关键词。在JavaScript中,可以通过以下代码获取HTTP Referrer信…

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