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

深喘旋磨做紧夹断妖精网站谷歌排名网站优化

深喘旋磨做紧夹断妖精网站,谷歌排名网站优化,自助提卡网站怎么做,域名解析好了怎么做网站websocket实现简易聊天室 又做了一个关于websocket广播和在线人数统计的练习&#xff0c;实现一个简易的聊天室。 前端vue3 前端里的内容主要包含&#xff1a; 1.css的animation来实现公告从右到左的轮播。 2.websocket的onmessage里对不同消息的处理。 <template>&l…

websocket实现简易聊天室

又做了一个关于websocket广播和在线人数统计的练习,实现一个简易的聊天室。

前端vue3

前端里的内容主要包含:
1.css的animation来实现公告从右到左的轮播。
2.websocket的onmessage里对不同消息的处理。

<template><div class="common-layout"><el-container><el-header><el-row><el-col :span="1"><div>公告:</div></el-col><el-col :span="20"><div class="scroll-container"><div class="text-scroll">公告信息</div></div></el-col><el-col :span="3" class="paddingleft20">在线人数:<span class="spanTip">{{onlineCount}}</span></el-col></el-row></el-header><el-container><el-aside><el-row v-for="(item, index) in onlineUsers" :key="index"><span class="onlinespan">{{item}}</span></el-row></el-aside><el-container><el-main v-html="othermessage"></el-main><el-footer><el-row><el-col :span="22"><el-input v-model="this.message" :rows="2" resize="none" type="textarea" @keyup.enter="sendMessage()"/></el-col><el-col :span="2" class="center"><el-button type="primary" @click="sendMessage()">发送</el-button></el-col></el-row></el-footer></el-container></el-container></el-container></div>
</template><script >
import { ref } from 'vue';
const socket = new WebSocket('ws://localhost:8080/chartroom');
const othermessage=ref('')
const onlineCount=ref(0)
const onlineUsers=ref([])
const own=ref('')
export default {name: 'Chart-Room',components: {},data(){return{message:'',othermessage,onlineCount,onlineUsers,own}},mounted(){this.connect();},unmounted(){this.beforeDestroy();},methods:{connect() {socket.onopen = function() {};socket.onmessage = function(event) {if(event.data.indexOf('onlineCount:')>-1){onlineCount.value=event.data.split(':')[1]}else if(event.data.indexOf('onlineUsers:')>-1){var userStr=event.data.split(':')[1];onlineUsers.value=userStr.split(',')}else if(event.data.indexOf('own')>-1){own.value=event.data.split(':')[1]}else{othermessage.value += "<div>"+event.data+"</div>"}};socket.onerror = function(event) {console.error('WebSocket error observed:', event);};},beforeDestroy() {if (socket) {socket.close();}},sendMessage() {if (socket.readyState === WebSocket.OPEN) {socket.send(own.value+":"+this.message);this.message=""}},}
}
</script><style scoped>.el-header{background-color:rgb(164, 172, 184);color: rgb(252, 252, 252);text-align: left;padding: 10px 15px;height:40px;}.el-aside{background-color:rgb(204, 209, 214);width:180px;height: 300px;}.el-main{background-color:rgb(246, 250, 253);padding: 10px 10px;white-space: pre-wrap;font-size: 14px;}.el-footer{margin:0px;padding:3px 3px;background-color:rgb(237, 241, 245);}.center{text-align: center;padding: 10px 5px;}.scroll-container {overflow: hidden;white-space: nowrap;text-align: right;}.text-scroll {display: inline-block;/** 实现从右到左的动画效果 */animation: scroll-right 30s linear infinite;}@keyframes scroll-right {0% {transform: translateX(100%);}100% {transform: translateX(-100%);}}.paddingleft20{padding-left: 20px;}.spanTip{color: rgb(252, 229, 179);}.onlinespan{margin:10px;color: rgb(85, 106, 128);}
</style>

后端java+mongodb

1.config配置

@Configuration
@EnableWebSocket
public class ChartConfig implements WebSocketConfigurer {@Overridepublic void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {registry.addHandler(chartHandler(), "/chartroom").setAllowedOrigins("*"); // 允许跨域}@Beanpublic ChartHandler chartHandler() {return new ChartHandler();}
}

2.处理连接成功后增加在线人数、断开连接后减少在线人数以及广播和单独发送消息。

public class ChartHandler extends TextWebSocketHandler {private static final Set<WebSocketSession> sessionsSet = Collections.synchronizedSet(new HashSet<>());/*** 接收消息*/@Overridepublic void handleTextMessage(WebSocketSession session, TextMessage message) throws IOException {//记录到mongodbMap<String, String> map = new HashMap<>();map.put("time", new Date().toString());String msg=message.getPayload().trim();map.put("message", msg.split(":")[1]);SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");String currentDate = sdf.format(new Date());MongoDBUtil.insertContent(currentDate, msg.split(":")[0], map);// 发送消息给客户端sendMessageToAll(message.getPayload());}/*** 连接后的处理*/@Overridepublic void afterConnectionEstablished(WebSocketSession session) throws Exception {sessionsSet.add(session);sendMessageToAll("onlineCount:" + sessionsSet.size());sendMessageToAll("onlineUsers:" + getListUsers());session.sendMessage(new TextMessage("own:【游客】"+session.getId().substring(0, 8)));}/*** 获取在线用户列表*/private String getListUsers() {List<String> usersList = new ArrayList<>();for(WebSocketSession item : sessionsSet){String userName="【游客】"+item.getId().substring(0, 8);if(!usersList.contains(userName)){usersList.add(userName);}}return String.join(",", usersList);}/*** 关闭连接后的处理*/@Overridepublic void afterConnectionClosed(WebSocketSession session, CloseStatus closeStatus) throws Exception {sessionsSet.remove(session);sendMessageToAll("onlineCount:" + sessionsSet.size());sendMessageToAll("onlineUsers:" + getListUsers());}/*** 广播发送消息*/private void sendMessageToAll(String message) {sessionsSet.forEach(item -> {try {item.sendMessage(new TextMessage(message));} catch (IOException e) {e.printStackTrace();}});}
}
http://www.hkea.cn/news/109289/

相关文章:

  • 竞价排名广告东莞关键词排名快速优化
  • 做视频网站要什么格式好网络营销公司怎么注册
  • 企业专业网站建设快速网站搭建
  • 武威建设网站的网站google谷歌搜索
  • 长沙公司做网站多少钱推广平台怎么做
  • 现在大家做电商网站用什么源码营销策略都有哪些
  • 可以做试卷的网站英语怎么说seo关键词排名优化系统源码
  • 网站怎么设置支付功能企业网站的主要类型有
  • 成都圣都装饰装修公司北京搜索优化排名公司
  • 境外建设网站贴吧互联网域名注册查询
  • 广州建站工作室淘客推广怎么做
  • 中国最大的网站建设公司百度广告联盟点击一次多少钱
  • wordpress单页主题营销seo手机关键词网址
  • dedecms做电影网站韩国最新新闻
  • 哪个网站做废旧好如何在百度上发布自己的广告
  • 网站表单及商品列表详情模板如何搭建自己的网站
  • 网站域名登记证明百度高级搜索怎么用
  • 国外网站在国内做镜像站点网站搭建费用
  • 网站后台如何添加关键词软件开发公司
  • 手机做网站的网站windows优化大师卸载不了
  • 万网速成网站有哪些 功能自己的网站怎么推广
  • 邯郸哪有做网站的河南百度推广公司
  • 我是做环保类产品注册哪些浏览量大的网站推销自己的产品比较好呢西安网站seo优化公司
  • 网页传奇游戏排行昆明网络推广优化
  • 商城模板网站模板网站软文是什么
  • 校园网站推广方案怎么做网站排名推广工具
  • 深圳罗湖企业网站建设报价网络媒体发稿平台
  • 用别人公司域名做网站线下推广的渠道和方法
  • php mysql的网站开发外贸推广平台
  • 济南网站建设认可搜点网络能百度指数有三个功能模块