基于websocket实现简单聊天室对话

下面是基于websocket实现简单聊天室对话的完整攻略。

简介

WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议,它使得浏览器和服务器之间的数据交换变得更加高效、实时。利用 WebSocket 技术,我们可以很容易地实现一个简单的聊天室对话功能。

步骤

1. 启动WebSocket服务端

WebSocket 服务端可以选择使用不同的编程语言实现,例如 Java、Node.js、Python 等。在此我们以 Node.js 作为例子,启动一个最简单的 WebSocket 服务端。

安装 ws 模块:

npm install ws

编写代码:

const WebSocket = require('ws');

const wss = new WebSocket.Server({ port: 9000 });

wss.on('connection', function connection(ws) {
  ws.on('message', function incoming(message) {
    console.log('received: %s', message);
    wss.clients.forEach(function each(client) {
      if (client.readyState === WebSocket.OPEN) {
        client.send(message);
      }
    });
  });
});

代码说明:

  • 使用 require('ws') 引入 ws 模块。
  • 创建一个 WebSocket 服务端,监听 9000 端口。
  • 当有新的客户端连接时,服务端回调函数监听到 connection 事件并执行。
  • 在客户端发送消息时,服务端回调函数监听到 message 事件并执行。
  • 在服务端接收到消息后,遍历所有连接的客户端并将消息发送给每个客户端。

2. 编写WebSocket客户端

在客户端上使用 WebSocket 需要先创建一个 WebSocket 对象,并通过它向服务端发送和接收消息。

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

socket.addEventListener('open', function (event) {
  socket.send('Hello Server!');
});

socket.addEventListener('message', function (event) {
  console.log('Message from server', event.data);
});

代码说明:

  • 使用 new WebSocket() 创建一个 WebSocket 对象,通过第一个参数指定服务端的地址。
  • 在连接建立成功后,回调函数监听到 open 事件并执行,发送一条消息给服务端。
  • 当有消息从服务端传回来时,回调函数监听到 message 事件并执行,将消息输出到控制台上。

3. 完整示例代码

服务端代码 server.js

const WebSocket = require('ws');

const wss = new WebSocket.Server({ port: 9000 });

wss.on('connection', function connection(ws) {
  ws.on('message', function incoming(message) {
    console.log('received: %s', message);
    wss.clients.forEach(function each(client) {
      if (client.readyState === WebSocket.OPEN) {
        client.send(message);
      }
    });
  });
});

客户端代码 client.html

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>WebSocket Client</title>
</head>
<body>
  <input type="text" id="input" placeholder="Type your message...">
  <button id="send">Send</button>
  <div id="output"></div>
  <script>
    const socket = new WebSocket('ws://localhost:9000');

    const input = document.getElementById('input');
    const sendButton = document.getElementById('send');
    const output = document.getElementById('output');

    socket.addEventListener('open', function (event) {
      console.log('Connection established');
    });

    socket.addEventListener('message', function (event) {
      output.innerHTML += '<p>' + event.data + '</p>';
    });

    sendButton.addEventListener('click', function () {
      socket.send(input.value);
      input.value = '';
    });
  </script>
</body>
</html>

在浏览器中打开 client.html 文件,输入要发送的消息并点击“Send”按钮即可完成简单的聊天室对话。

总结

通过以上步骤,我们可以很容易地实现基于 WebSocket 的简单聊天室对话功能。其它编程语言实现方式基本相同,只需更改相关语言的 WebSocket 模块即可。如果需要更加完善的功能,在此基础上可以继续扩展。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:基于websocket实现简单聊天室对话 - Python技术站

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

相关文章

  • 详解Node.js开发中的express-session

    1. 什么是 express-session express-session 是 Node.js 开发中的一个 session 中间件,由于 HTTP 协议本身是无状态的,所以使用 session 机制来维护客户端与服务端之间的状态。 session 机制的实现方式通常有两种: 使用 cookie,将 session id 存放在客户端浏览器的 cookie…

    node js 2023年6月8日
    00
  • nodejs中函数的调用实例详解

    下面我将为大家详细讲解“Node.js中函数的调用实例详解”。 什么是函数 首先,我们需要了解什么是函数。在JavaScript(和Node.js)中,函数是一段可重用的代码,它们提供了一种封装代码的方式,可以接受参数,可以返回值也可以不返回值。函数的调用必须使用函数名和一对括号。 下面是一个简单的函数示例: function add(a, b) { ret…

    node js 2023年6月8日
    00
  • nodejs 子进程正确的打开方式

    下面是关于nodejs子进程正确的打开方式的完整攻略。 1. 为什么需要子进程? nodejs是单线程的,也就是说在运行过程中只有一个执行上下文。这意味着在执行某些耗时的操作时会导致后续操作被阻塞,降低应用程序的性能。而通过创建子进程,可以在不影响主进程的情况下在子进程中执行耗时操作。 2. 如何正确打开子进程? 在nodejs中可以通过child_proc…

    node js 2023年6月8日
    00
  • 深入探讨javascript函数式编程

    深入探讨Javascript函数式编程 Javascript 函数式编程是一种将函数作为主要构建块的编程范式。与传统的命令式编程不同,函数式编程通过组合函数来完成任务,这使得代码更加简洁、模块化和易于测试。本篇文章将深入探讨Javascript函数式编程的一些关键概念以及如何在实践中应用它们。 函数式编程的核心概念 纯函数 Javascript 中的纯函数是…

    node js 2023年6月8日
    00
  • 基于node.js的fs核心模块读写文件操作(实例讲解)

    基于node.js的fs核心模块读写文件操作是node.js开发者最常用的功能之一,下面我将为你详细讲解下这个核心模块的使用方法。具体内容如下: 1. fs核心模块的基本介绍 fs是node.js提供的文件系统模块,它提供了大量的文件操作API和功能。这个模块可以帮助开发者读取、写入、更改、删除文件,以及查询文件状态等。其中最常用的几个API包括: fs.r…

    node js 2023年6月8日
    00
  • 实例详解Nodejs 保存 payload 发送过来的文件

    下面是关于“实例详解Nodejs 保存 payload 发送过来的文件”的完整攻略: 1. 背景说明 在开发web应用程序时,经常需要通过上传文件的方式与客户端进行交互。客户端可以通过表单提交文件数据,也可以通过使用JavaScript编写发送文件的客户端来向服务器发送文件。 本文主要介绍使用Node.js处理通过POST请求发送的文件上传数据。 2. 如何…

    node js 2023年6月8日
    00
  • 微信小程序 Buffer缓冲区的详解

    微信小程序 Buffer缓冲区的详解 1. 什么是 Buffer 在 JavaScript 中,Buffer 是一个用于处理二进制数据的类。它的实例类似于整数数组,但它用于在 TCP 流、文件系统操作、以及其他上下文中处理原始的二进制数据。在 Node.js 中经常使用 Buffer 类来处理数据流,它是 Node.js 中处理网络数据流的重要基础。 在微信…

    node js 2023年6月8日
    00
  • Node.js中用D3.js的方法示例

    下面是Node.js中用D3.js的方法示例的完整攻略: 1. 安装Node.js和D3.js 首先需要在本地安装Node.js和D3.js。Node.js可以到官网上下载安装包进行安装,而D3.js可以通过npm安装命令进行安装,具体步骤如下: npm install d3 安装完成后,在项目文件夹中创建一个index.html文件和一个app.js文件。…

    node js 2023年6月8日
    00
合作推广
合作推广
分享本页
返回顶部