极简websocket实时聊天

news/2024/11/22 14:05:47/

在线体验链接:http://47.242.53.5:888/

项目git地址:https://gitee.com/xiao-ming-1999/websocket-server.git

实现步骤:

  1. 在前端创建WebSocket连接:在Vue组件中使用vue-native-websocket库或原生的WebSocket API来创建WebSocket连接。确保连接到服务器的WebSocket地址和端口。

  2. 在前端发送消息:在Vue组件中通过WebSocket连接发送用户输入的消息到服务器。可以通过表单提交、按钮点击等方式触发发送操作,并使用WebSocket的send方法将消息发送给服务器。

  3. 在后端处理WebSocket连接:在服务器端使用Node.js和Express或其他后端框架来处理WebSocket连接请求,并维护连接状态。

  4. 在后端接收和广播消息:在服务器端监听WebSocket连接的message事件,当接收到一条新消息时,将其广播给所有连接的客户端。

  5. 在前端接收和显示消息:在Vue组件中监听WebSocket的message事件,当接收到新消息时,在页面上更新聊天消息列表或对话框。

前端代码:

<template><div class="chat-box"><h2>websocket-chat</h2><ul><liv-for="(message, index) in messages":key="index":style="{ background: '#' + message.bgColor }"class="message-item"><p>{{ message.sender }}:{{ message.text }}</p></li></ul><div class="chat-btn"><van-fieldv-model="newMessage"centerclearableplaceholder="请随意输入信息"@keydown.enter="sendMessage"><template #button><van-button type="primary" @click="sendMessage">发送</van-button></template></van-field></div></div>
</template><script>
const randomColor = Math.floor(Math.random() * 16777215).toString(16);
// const randomColor2 = Math.floor(Math.random() * 16777215).toString(16);
export default {name: "clockIn",data() {return {messages: [],newMessage: "",userId: Date.now(),randColor: randomColor,};},mounted() {// 监听WebSocket的message事件,当接收到新消息时,在页面上更新聊天消息列表或对话框。this.$socket.onmessage = (event) => {const message = JSON.parse(event.data);this.messages.push(message);console.log(this.messages, "this.messages");};this.$socket.onopen = () => {this.$socket.send(JSON.stringify({ action: "getUserId" }));};},methods: {sendMessage() {const message = {id: this.userId,text: this.newMessage,bgColor: this.randColor,};// this.messages.push(this.newMessage);this.$socket.send(JSON.stringify(message));this.newMessage = "";},},
};
</script>
<style lang="scss" scoped>
.chat-box {height: 100vh;overflow-y: auto;padding: 50px 0;h2 {position: fixed;top: 0;background-color: #07c160;font-weight: 700;text-align: center;width: 100%;height: 50px;line-height: 50px;color: #fff;}
}.chat-btn {width: 100%;height: 50px;position: fixed;bottom: 0;display: flex;justify-content: space-between;align-items: center;::v-deep .van-cell {padding-right: 0;}
}.message-item {width: 100%;// height: 40px;// line-height: 40px;// white-space: pre-wrap;
}
</style>

 后端代码

const express = require("express");
const WebSocket = require("ws");const app = express();app.get("/", (req, res) => {res.send("Hello, World!"); // 发送响应给客户端
});const server = app.listen(3008, () => {console.log("Server is running on http://47.242.53.5:3008");
});const wss = new WebSocket.Server({ server });
const clients = [];wss.on("connection", (ws) => {// 服务器端监听WebSocket连接的message事件,当接收到一条新消息时,将其广播给所有连接的客户端。ws.on("message", (message) => {const parsedMessage = JSON.parse(message);console.log(message, "message");if (parsedMessage.action === "getUserId") {ws.userId = generateUserId(); // 分配用户标识符//   ws.send(JSON.stringify({ userId: ws.userId }));return;}parsedMessage.sender = ws.userId;const broadcastMessage = JSON.stringify(parsedMessage);// 广播消息给所有连接的客户端wss.clients.forEach((client) => {if (client.readyState === WebSocket.OPEN) {client.send(broadcastMessage);}});});ws.on("close", () => {// 移除关闭的客户端连接clients.splice(clients.indexOf(ws), 1);});
});
// 生成用户昵称
function generateUserId() {return Math.random().toString(36).substr(2, 9);
}


http://www.ppmy.cn/news/833784.html

相关文章

三菱fx3uplc恢复出厂设置_三菱fx3u plc解密过程与步骤分享

三菱plc fx3u解密过程与步骤 FX3U plc解密&#xff0c;免拆机的&#xff0c;包括禁止上载的问题也能读出正确程序和参数。 以下是解密的过程&#xff0c;供大家参考。 首先&#xff0c;三菱PLC FX3U用的编程软件必须用GX DEVE LOPER8.10以上的版本&#xff0c;也可以在网上下载…

三菱FX3SA PLC通过FX3G-485BD模块及变频器通信指令和三菱D700变频器进行通讯记录

要求&#xff1a;通过外部信号启动电机&#xff0c;通过通讯修改变频器的运行频率和加速时间及减速时间。 资料&#xff1a; 1.《FX3S/FX3G/FX3GC/FX3U/FX3UC 系列编程手册 - 基本 & 应用指令说明书》 2.《FX 用户手册 - 通信篇》 3.《FR-D700-CHT 使用手册(应用篇)》 …

三菱fx5u plc螺丝机项目整套程序(含触摸屏程序) 程序注释全面,用的三菱fx5u系列plc和威纶触摸屏、三菱伺服电机

三菱fx5u plc螺丝机项目整套程序&#xff08;含触摸屏程序&#xff09; 程序注释全面&#xff0c;用的三菱fx5u系列plc和威纶触摸屏、三菱伺服电机。 文件包括plc程序、触摸屏程序、电气图、IO地址分配表、电气BOM表、伺服参数配置&#xff0c;本程序已设备上成熟生产。 自己辛…

三菱PLC控制三轴(3个伺服)机械搬运手程序

三菱PLC控制三轴(3个伺服)机械搬运手程序&#xff0c;程序结构清晰明了&#xff0c;通俗易懂&#xff0c;触摸屏画画功能齐全&#xff0c;有PLC程序&#xff0c;触摸屏程序&#xff0c;CAD电气图纸。 实际项目&#xff0c;plc fx3u &#xff0c;触摸屏 信捷&#xff0c;伺服台达…

三菱PLC基础知识 辅助继电器M

PLC 内部有很多辅助继电器&#xff0c;和输出继电器一样&#xff0c;只能由程序驱动&#xff0c;每个辅助继电器也有无数对常开、常闭接点供编程使用。其作用相当于继电器控制线路中的中间继电器。辅助继电器的接点在 PLC 内部编程时可以任意使用&#xff0c;但它不能直接驱动负…

三菱PLC编程与案例精讲之ST语言

想看到如何使用三菱ST文本结构化编程语言来编写通讯程序吗&#xff0c;比如让你用ST编写Modbus代码、编写Socket代码、用ST控制伺服进行各种动作&#xff0c;用ST实现多轴联动&#xff0c;电子凸轮&#xff0c;应该怎么做吗&#xff1f; 第一章 ST课程教学的目的 1.1 10分钟了…

三菱Q系列PLC批量读取软元件

简介&#xff1a; 通过阅读MX Component文档&#xff0c;了解相关函数及注意事项&#xff0c;开发环境是Windows&#xff0c;开发软件VC 6&#xff0c;需要安装MX Component。 1.代码展示 CString szReadDevice _T("M7600"); //软元件 long lSize 1; …

三菱FX3U PLC使用ST结构化文本与梯形图编写的4个仓位配方程序

三菱FX3U PLC使用ST结构化文本与梯形图编写的4个仓位配方程序 程序功能简介&#xff1a; 1、可以随意在触摸屏中设置添加&#xff0c;删除&#xff0c;更改配方&#xff0c;最多可以设置10000种不同配方&#xff0c; 2、通过设置配方编号&#xff0c;和设置生产批次&#xff…