当前位置: 首页 > news >正文

用uniapp 及socket.io做一个简单聊天app 2

在这里只有群聊,二个好友聊天,可以认为是建了一个二人的群聊。

const express = require('express');
const http = require('http');
const socketIo = require('socket.io');
const cors = require('cors'); // 引入 cors 中间件const app = express();
const server = http.createServer(app);
const io = socketIo(server, {cors: {origin: "*", // 允许所有来源methods: ["GET", "POST"]}
});// 使用 cors 中间件
app.use(cors());const port = 3000;
const groups = {};io.on('connection', (socket) => {console.log('New user connected');// 用户加入群组socket.on('joinGroup', ({ groupName, userName }) => {socket.join(groupName);groups[socket.id] = { groupName, userName };socket.to(groupName).emit('message', `${userName} has joined the group`);console.log(`${userName} joined group ${groupName}`);});// 发送消息socket.on('sendMessage', ({ groupName, message, userName }) => {io.to(groupName).emit('message', `${userName}: ${message}`);console.log(`Message sent to ${groupName}: ${userName}: ${message}`);});// 踢人socket.on('kickUser', ({ groupName, userName }) => {for (let id in groups) {if (groups[id].userName === userName && groups[id].groupName === groupName) {io.sockets.sockets.get(id).leave(groupName);io.to(groupName).emit('message', `${userName} has been kicked from the group`);console.log(`${userName} was kicked from group ${groupName}`);break;}}});// 用户断开连接socket.on('disconnect', () => {if (groups[socket.id]) {const { groupName, userName } = groups[socket.id];socket.to(groupName).emit('message', `${userName} has left the group`);delete groups[socket.id];console.log(`${userName} left group ${groupName}`);}});
});server.listen(port, () => {console.log(`Server running on port ${port}`);
});

uniapp的界面

<template><view class="container"><view><input v-model="userName" placeholder="用户名"/><input v-model="groupName" placeholder="群名"/><button @click="joinGroup">加入群</button><button @click="kickUser">踢人</button></view><view><view id="messages"><view v-for="(msg, index) in messages" :key="index">{{ msg }}</view></view><input v-model="message" placeholder="输入聊天"/><button @click="sendMessage">聊天</button></view></view>
</template><script>
import io from 'socket.io-client';export default {data() {return {socket: null,userName: 'wanghaibin',groupName: 'wanghaibin',message: '',messages: []};},onLoad() {this.socket = io('http://127.0.0.1:3000');this.socket.on('message', (msg) => {this.messages.push(msg);});},methods: {joinGroup() {this.socket.emit('joinGroup', { groupName: this.groupName, userName: this.userName });},sendMessage() {if (this.message.trim() !== '') {this.socket.emit('sendMessage', { groupName: this.groupName, message: this.message, userName: this.userName });this.message = '';}},kickUser() {const userNameToKick = prompt('Enter the username to kick:');this.socket.emit('kickUser', { groupName: this.groupName, userName: userNameToKick });}}
};
</script><style>
.container {padding: 20px;
}
#messages {height: 300px;overflow-y: scroll;border: 1px solid #ccc;margin-bottom: 10px;
}
input {display: block;margin: 10px 0;
}
button {display: block;margin: 10px 0;
}
</style>

运行效果:在这里插入图片描述

http://www.lryc.cn/news/406054.html

相关文章:

  • Si24R03:高度集成的低功耗SOC芯片中文资料
  • K8s-控制器
  • Meta 发布 LLAMA 3.1;特斯拉无人出租车推迟至 10 月;谷歌将向 Waymo 再投 50 亿美元
  • C 语言基础概念总结
  • Django教程(000):初识Django
  • SQLynx数据库管理工具
  • Java基础06:变量,常量,作用域(狂神说Java)
  • inflight 守恒建模
  • HarmonyOS NEXT星河版零基础入门到实战
  • 测试开发面试题---JVM
  • python库 - jsonpath
  • [RK3588][Android12] Android->OTA包超过4个G导致打包失败
  • (雷达数据处理中的)跟踪算法(3) – 可用于目标跟踪实践的数据集介绍解析
  • 【C语言报错已解决】Use of Uninitialized Variable
  • 3 Go语言的变量声明
  • PyMySQL库的使用方法
  • iOS 创建一个私有的 CocoaPods 库
  • Linux_实现UDP网络通信
  • C# 代理模式
  • 【1】Python机器学习之基础概念
  • HashMap源码解析
  • [Javascript】前端面试基础3【每日学习并更新10】
  • C++自定义字典树结构
  • dockerfile部署wordpress
  • CSS(二)——CSS 背景
  • 开机出现grub无法进入系统_电脑开机出现grub解决方法
  • uboot 设置bootargs配置内核网络挂载根文件系统
  • Vue3+.NET6前后端分离式管理后台实战(三十一)
  • 22集 如何minimax密钥和groupid-《MCU嵌入式AI开发笔记》
  • 决策树的概念