基于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异步方法的异步调用与同步调用实现方法示例

    来详细讲解一下“node异步方法的异步调用与同步调用实现方法示例”。 什么是Node异步方法 Node.js 采用的单线程模型,主线程负责接收客户端请求和处理返回结果等操作,而后台处理任务则交由其他线程来执行。这就涉及到了异步调用和同步调用的问题。Node.js 中一般用回调函数来实现异步调用,虽然这样代码不太好看,但是能够提高代码的执行效率。 异步调用 在…

    node js 2023年6月8日
    00
  • Java语言基于无向有权图实现克鲁斯卡尔算法代码示例

    Java语言基于无向有权图实现克鲁斯卡尔算法代码示例,可以分为下面几个步骤: 1. 了解克鲁斯卡尔算法 克鲁斯卡尔算法是一种用于求解最小生成树(Minimum Spanning Tree,简称MST)的算法,其通过按边权非递减的顺序将所有边加入生成树中。对于每一条边,都需判断它所在的两个点是否在同一个集合中,如果不在,则将它们合并,同时将边加入生成树中。 2…

    node js 2023年6月8日
    00
  • nodejs编写bash脚本的终极方案分享

    我来给你详细讲解一下“nodejs编写bash脚本的终极方案分享”的完整攻略。 1. 前言 在介绍nodejs编写bash脚本的终极方案之前,我们需要先了解一些基础知识。 bash是一种命令行操作系统的壳(shell),它提供了一种交互式的界面,我们可以在命令行中直接输入指令,然后执行操作。而nodejs是一种运行在服务器端的JavaScript环境,它通过…

    node js 2023年6月8日
    00
  • Java新特性之Nashorn_动力节点Java学院整理

    Java新特性之Nashorn_动力节点Java学院整理 简介 Nashorn 是 JDK 8 中引入的一套用于在 Java 平台上运行 Javascript 脚本的引擎,它可以支持 ES5 以及部分 ES6 的语法。使用 Nashorn 引擎可以让我们轻松地将 Java 代码与 Javascript 代码融为一体,实现更高效的编程。 使用方法 在 Java…

    node js 2023年6月8日
    00
  • node.js中的http.request.end方法使用说明

    关于“node.js中的http.request.end方法使用说明”,我可以提供以下详细攻略: 1. 什么是http.request.end方法 http.request方法是Node.js中发送http请求的一种基础方法,这个方法返回一个clientRequest对象,可以通过设置options(比如请求方法、请求头部、请求体等)来指定请求的内容。 ht…

    node js 2023年6月8日
    00
  • Node.js断点续传的实现

    下面就是“Node.js断点续传的实现”的完整攻略。 一、什么是断点续传 断点续传顾名思义就是在文件下载中断时,一定时间段后通过已下载的数据点开始接着上次的下载进行下载,从而达到不用重头下载的效果,实现了文件下载的高效性。 二、实现断点续传的关键点 获取已下载的数据断点 根据数据断点设置请求头 Range 保存数据断点 三、实现思路 我们可以通过读取已下载的…

    node js 2023年6月8日
    00
  • Vue+Node实现商品列表的分页、排序、筛选,添加购物车功能详解

    Vue+Node实现商品列表的分页、排序、筛选,添加购物车功能详解 项目需求与背景 本项目是一个电商网站,需要实现商品列表的分页、排序、筛选和添加购物车功能。其中,商品列表由后端Node.js服务器提供接口,前端Vue框架进行页面渲染和交互。 技术栈与工具 前端框架:Vue.js 后端服务器:Node.js 数据库:MySQL 开发工具:Visual Stu…

    node js 2023年6月8日
    00
  • NodeJS 模块开发及发布详解分享

    下面给出关于“NodeJS模块开发及发布详解分享”的完整攻略,包括以下内容: NodeJS模块的基本概念; NodeJS模块的分类; NodeJS模块的使用方法; NodeJS模块的开发过程; NodeJS模块的发布过程; 示例说明。 NodeJS模块的基本概念 NodeJS模块是指NodeJS中可复用的代码单位,具有独立的作用域和命名空间,可以引入其他模块…

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