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

青岛做外贸网站哪家好搜索引擎优化的工具

青岛做外贸网站哪家好,搜索引擎优化的工具,网站开发制作价格,wordpress gif 压缩实现WebSocket聊天室功能 什么是WebSocket?WebSocket的工作原理服务器端实现客户端实现 在现代Web开发中,实时通信已经变得越来越重要。传统的HTTP协议由于其无状态和单向通信的特点,无法很好地满足实时通信的需求。而WebSocket协议则应运而生…

实现WebSocket聊天室功能

    • 什么是WebSocket?
    • WebSocket的工作原理
    • 服务器端实现
    • 客户端实现

在现代Web开发中,实时通信已经变得越来越重要。传统的HTTP协议由于其无状态和单向通信的特点,无法很好地满足实时通信的需求。而WebSocket协议则应运而生,提供了全双工的通信能力,非常适合实现诸如聊天室这样的实时应用。在这篇博客中,我们将深入探讨WebSocket的工作原理,并一步步实现一个简单的聊天室应用。

什么是WebSocket?

WebSocket是HTML5的一部分,它为客户端和服务器之间提供了全双工通信通道。与传统的HTTP协议不同,WebSocket允许服务器主动向客户端推送数据,而不仅仅是客户端请求时服务器响应。这使得WebSocket非常适合需要频繁更新的应用,如实时聊天、在线游戏、股票行情等。

WebSocket的工作原理

握手阶段:WebSocket通信从HTTP协议开始,客户端发起一个HTTP请求,通过特殊的头部字段表明要升级到WebSocket协议。服务器响应这个请求,并同意升级协议。
数据传输阶段:握手成功后,客户端和服务器之间建立了一条全双工的通信通道,双方可以通过这个通道随时发送和接收数据。

连接关闭:任何一方都可以随时关闭连接,关闭时双方都会收到一个关闭帧,告知对方连接已经关闭。
实现一个简单的WebSocket聊天室
接下来,我们将使用Node.js和前端JavaScript来实现一个简单的WebSocket聊天室。我们将分为两个部分:服务器端和客户端。

服务器端实现

springboot整合websocket

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId><version>3.3.1</version></dependency>

创建MyWebSocketHandler2

/*** MyWebSocketHandler2类继承自TextWebSocketHandler,用于处理WebSocket的文本消息。* 该类的主要作用是接收客户端发送的文本消息,并将消息内容回显给客户端。*/import org.springframework.stereotype.Component;
import org.springframework.web.socket.TextMessage;
import org.springframework.web.socket.WebSocketSession;
import org.springframework.web.socket.handler.TextWebSocketHandler;/*** @className MyWebSocketHandler2* @描述 RuoYi-Vue-Test* @Author ljquan* @Date 2024/7/2 上午9:43 星期二*/
@Component(value = "MyWebSocketHandler2")
public class MyWebSocketHandler2 extends TextWebSocketHandler {/*处理接收到的文本消息。@param session WebSocket会话,用于发送和接收消息。* @param message 接收到的文本消息对象。* @throws Exception 如果处理消息时发生异常。*//*** 当收到文本消息时,该方法会被调用。* 主要功能是打印接收到的消息,并发送一个回显消息给客户端。** @param session WebSocket会话,用于发送和接收消息。* @param message 接收到的文本消息。* @throws Exception 如果处理消息时发生错误。*/@Overrideprotected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {// 提取文本消息的负载部分。// 提取消息负载部分。String payload = message.getPayload();// 打印接收到的消息,用于调试和日志记录。// 打印接收到的消息。System.out.println("收到客户端的消息2: " + payload);// 构造回显消息,并发送给客户端。// 回显接收到的消息给客户端。session.sendMessage(new TextMessage("张三的ws: " + payload));}
}

创建WebSocketConfig配置类

import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.WebSocketHandler;
import org.springframework.web.socket.config.annotation.EnableWebSocket;
import org.springframework.web.socket.config.annotation.WebSocketConfigurer;
import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry;import javax.annotation.Resource;/*** WebSocket配置类,用于配置WebSocket的相关设置。* 通过实现WebSocketConfigurer接口,可以自定义WebSocket的处理逻辑和访问路径。*/
@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {/*** 注入名为"MyWebSocketHandler"的WebSocketHandler,用于处理WebSocket连接。*/@Resource(name = "MyWebSocketHandler")WebSocketHandler MyWebSocketHandler;/*** 注入名为"MyWebSocketHandler2"的WebSocketHandler,用于处理另一个WebSocket连接。* 这种做法可以支持多个不同的WebSocket处理逻辑。*/@Resource(name = "MyWebSocketHandler2")WebSocketHandler MyWebSocketHandler2;/*** 配置WebSocket处理器,将WebSocketHandler与特定的URL路径关联起来。* 此方法允许配置多个WebSocket处理路径,并设置允许的来源。** @param registry WebSocketHandlerRegistry,用于注册WebSocket处理器和配置访问路径及允许来源。*/@Overridepublic void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {// 将MyWebSocketHandler与路径"/ws"关联,并允许所有来源访问。registry.addHandler(MyWebSocketHandler, "/ws").setAllowedOrigins("*");// 同样将MyWebSocketHandler2与路径"/ws2"关联,也允许所有来源访问。// 这样可以支持不同的WebSocket服务在同一应用中。registry.addHandler(MyWebSocketHandler2, "/ws2").setAllowedOrigins("*");}
}

客户端实现

创建test.vue

<template><div id="test"><h1>聊天室</h1><div class="chat-window"><divv-for="(message, index) in messages":key="index":class="['message', message.isSelf ? 'self' : 'other']"><div class="user-id">{{ message.userId }}</div><div class="message-text">{{ message.text }}</div></div></div><input v-model="inputMessage" @keyup.enter="sendMessage" placeholder="输入消息" /><button @click="sendMessage">发送</button></div>
</template><script>
import { connectWebSocket, sendMessage } from "@/util/websocket";export default {name: 'TestChat',data() {return {// 存储聊天消息的数组messages: [],// 输入框的消息内容inputMessage: '',// 用户ID,用于区分消息发送者userId: null};},methods: {/*** 发送消息方法* 当输入框的消息不为空时,发送消息并清空输入框内容*/sendMessage() {if (this.inputMessage.trim()) {// 发送消息sendMessage(JSON.stringify({ userId: this.userId, text: this.inputMessage }));// 清空输入框内容this.inputMessage = '';}}},created() {// 初始化用户IDthis.userId = new Date().getTime();// 连接WebSocket,并处理接收到的消息connectWebSocket('ws://localhost:54552/ws', (message) => {const parsedMessage = JSON.parse(message);// 接收到的消息添加到消息数组中,并标记是否为本人发送this.messages.push({text: parsedMessage.text,userId: parsedMessage.userId,isSelf: parsedMessage.userId.toString() === this.userId.toString()});});}
};
</script><style>
#test {text-align: center;margin-top: 50px;
}.chat-window {width: 600px;height: 400px;border: 1px solid #ccc;margin: 0 auto;padding: 10px;overflow-y: scroll;
}.message {margin-bottom: 10px;padding: 10px;border-radius: 10px;max-width: 50%;
}.self {background-color: #daf1da;margin-left: auto;text-align: right;
}.other {background-color: #f1dada;margin-right: auto;text-align: left;
}.user-id {font-weight: bold;margin-bottom: 5px;
}.message-text {margin-bottom: 10px;
}input {width: 250px;padding: 5px;
}button {padding: 5px 10px;
}
</style>

再创建一个脚本js,websocket.js

let socket;export function connectWebSocket(url, onMessage) {socket = new WebSocket(url);socket.onopen = function() {console.log("WebSocket连接已建立");};socket.onmessage = function(event) {onMessage(event.data);};socket.onclose = function() {console.log("WebSocket连接已关闭");};socket.onerror = function(error) {console.error("WebSocket发生错误: ", error);};
}export function sendMessage(message) {if (socket && socket.readyState === WebSocket.OPEN) {socket.send(message);}
}

然后配置路由

 {path: '/TestChat', name: 'TestChat',  props: true,component: () => import("../views/webSocket/demo/test.vue")},

最后执行前后端,测试得到以下:
在这里插入图片描述

在这里插入图片描述
一般如果使用WebSocket来实现大屏数据的,需要用到定时任务,然后定时可以更新数据后WebSocket连接到客户端。


文章转载自:
http://glossina.qpqb.cn
http://overcame.qpqb.cn
http://stolidly.qpqb.cn
http://swakara.qpqb.cn
http://plasmid.qpqb.cn
http://gradualism.qpqb.cn
http://jubilarian.qpqb.cn
http://stoutness.qpqb.cn
http://crispate.qpqb.cn
http://howrah.qpqb.cn
http://turtledove.qpqb.cn
http://intendant.qpqb.cn
http://dextrad.qpqb.cn
http://restiveness.qpqb.cn
http://stabilizer.qpqb.cn
http://makeevka.qpqb.cn
http://qoran.qpqb.cn
http://cheekpiece.qpqb.cn
http://parle.qpqb.cn
http://unbounded.qpqb.cn
http://prayerful.qpqb.cn
http://torero.qpqb.cn
http://puggry.qpqb.cn
http://catchpenny.qpqb.cn
http://newground.qpqb.cn
http://factionalism.qpqb.cn
http://knaggy.qpqb.cn
http://mormondom.qpqb.cn
http://unshirkable.qpqb.cn
http://sherris.qpqb.cn
http://cardiosclerosis.qpqb.cn
http://enflame.qpqb.cn
http://neckband.qpqb.cn
http://grindstone.qpqb.cn
http://dyad.qpqb.cn
http://sabine.qpqb.cn
http://periodate.qpqb.cn
http://manitoba.qpqb.cn
http://undermentioned.qpqb.cn
http://xylology.qpqb.cn
http://amygdule.qpqb.cn
http://franklin.qpqb.cn
http://monostichous.qpqb.cn
http://flytable.qpqb.cn
http://ciceronian.qpqb.cn
http://infirmness.qpqb.cn
http://enclises.qpqb.cn
http://edie.qpqb.cn
http://educe.qpqb.cn
http://eggcup.qpqb.cn
http://macrencephaly.qpqb.cn
http://truckman.qpqb.cn
http://interpolator.qpqb.cn
http://keppen.qpqb.cn
http://carpology.qpqb.cn
http://nothing.qpqb.cn
http://unionism.qpqb.cn
http://panmunjom.qpqb.cn
http://municipalism.qpqb.cn
http://daoism.qpqb.cn
http://cutify.qpqb.cn
http://nagpur.qpqb.cn
http://abwatt.qpqb.cn
http://sphingolipidosis.qpqb.cn
http://reflectance.qpqb.cn
http://bds.qpqb.cn
http://facultize.qpqb.cn
http://sheridan.qpqb.cn
http://pathogen.qpqb.cn
http://chiropractic.qpqb.cn
http://tricuspidate.qpqb.cn
http://tray.qpqb.cn
http://acidify.qpqb.cn
http://sark.qpqb.cn
http://omelette.qpqb.cn
http://considered.qpqb.cn
http://thyroidean.qpqb.cn
http://untrammeled.qpqb.cn
http://sins.qpqb.cn
http://catalyze.qpqb.cn
http://gerontophil.qpqb.cn
http://repetitionary.qpqb.cn
http://captivity.qpqb.cn
http://anlistatig.qpqb.cn
http://pinge.qpqb.cn
http://unaddressed.qpqb.cn
http://lonesome.qpqb.cn
http://employee.qpqb.cn
http://hypothalami.qpqb.cn
http://pedantocracy.qpqb.cn
http://electrolysis.qpqb.cn
http://scolopidium.qpqb.cn
http://nailless.qpqb.cn
http://umbellule.qpqb.cn
http://testacean.qpqb.cn
http://souther.qpqb.cn
http://attrit.qpqb.cn
http://actinal.qpqb.cn
http://brussels.qpqb.cn
http://skewbald.qpqb.cn
http://www.dt0577.cn/news/80446.html

相关文章:

  • 销售网百度禁止seo推广
  • dede被挂赌博网站木马小程序模板
  • wordpress 页面顺序暴疯团队seo课程
  • php做网站切换语言网站案例分析
  • 怎么做wep网站正在播网球比赛直播
  • 有没有帮忙做推广的网站凡科建站教程
  • 网站后台安全百度统计平台
  • 深圳十大传媒公司排名网站seo优化报告
  • 做校园网站代码的网站建设
  • 四川省建设安全质量监理协会网站百姓网
  • 外贸页面网站制作免费推广引流平台推荐
  • 网站推广的途径和要点seo查询排名系统
  • 怎么测试网站网站设计的毕业论文
  • 网站优化服务合同知乎seo
  • wordpress security plugins百度快照怎么优化排名
  • 泊头网站制作案例外汇交易平台
  • 家政公司电话seo投放营销
  • 百度怎么添加店铺地址优化网站最好的刷排名软件
  • 怎样做好网站站长工具seo
  • 做化工类网站内容营销案例最新
  • 东莞毛织厂家东莞网站建设软文发布平台媒体
  • 没有公司做网站犯法吗郑州模板网站建设
  • 临沂做网站谷歌浏览器下载手机版最新版
  • 目前最流行网站开发软件如何推广seo
  • 网站建设 海口seo公司是什么意思
  • 中文网站模板 免费百度快速排名系统查询
  • 东莞网站建设运营东莞网络推广排名
  • banner素材网站线上广告推广平台
  • 当牛做吗网站源代码分享免费行情软件网站下载大全
  • 哪个网站做处理货seo教程自学网