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

典型的网站案例订单网站模块

典型的网站案例,订单网站模块,网站页面设计策划书,免费的外网连接器springBoot集成websocket实时消息推送 WebSocket是一种在Web应用程序中实现双向通信的协议。它允许在客户端和服务器之间建立持久性的连接#xff0c;并支持双向数据传输#xff0c;实现了实时、低延迟的通信。 #x1f4cd;常见的消息推送方法 WebSocket#xff1a;通过使…springBoot集成websocket实时消息推送 WebSocket是一种在Web应用程序中实现双向通信的协议。它允许在客户端和服务器之间建立持久性的连接并支持双向数据传输实现了实时、低延迟的通信。 常见的消息推送方法 WebSocket通过使用WebSocket协议可以在Java后端实现双向通信从而实现消息的实时推送。你可以使用Java中的WebSocket API或者使用开源库如Tomcat的WebSocket支持、Spring WebSocket等来实现。Server-Sent Events (SSE)SSE是一种基于HTTP的轻量级服务器推送技术它允许服务器向客户端单向推送消息。在Java后端你可以使用Servlet或者基于框架的实现来支持SSE。消息队列通过使用消息队列如RabbitMQ、ActiveMQ或者Kafka等Java后端可以将消息发布到消息队列中然后客户端通过订阅消息队列来获取实时消息推送。短轮询Long Polling即浏览器定时向服务器发送请求以此来更新数据的方法。如下图所示,原理就是客户端不断地向服务端发请求如果服务端数据有更新服务端就把数据发送回来客户端就能接收到新数据了长轮询Long Polling虽然不同于实时推送但长轮询是一种模拟实时推送的技术。在Java后端你可以实现长轮询机制来达到类似实时推送的效果。 以上是一些常见的Java后端实现消息实时推送提醒的方法。每种方法都有其适用的场景和特点 引入依赖 dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-websocket/artifactId /dependencyWebSocketConfig配置类 package com.yxsd.cnooc.data.wb;import org.springframework.context.annotation.Bean; import org.springframework.stereotype.Component; import org.springframework.web.socket.server.standard.ServerEndpointExporter;Component public class WebSocketConfig {Beanpublic ServerEndpointExporter serverEndpointExporter(){return new ServerEndpointExporter();} }WebSocketServer服务器类 package com.yxsd.cnooc.data.service;import org.springframework.stereotype.Component;import javax.websocket.*; import javax.websocket.server.PathParam; import javax.websocket.server.ServerEndpoint; import java.io.IOException; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.CopyOnWriteArraySet;/*** ServerEndpoint 注解是一个类层次的注解它的功能主要是将目前的类定义成一个websocket服务器端,* 注解的值将被用于监听用户连接的终端访问URL地址,客户端可以通过这个URL来连接到WebSocket服务器端*/ Component ServerEndpoint(/websocket/{userId}) public class WebSocketTest {private static ConcurrentHashMapString, CopyOnWriteArraySetWebSocketTest userwebSocketMap new ConcurrentHashMapString, CopyOnWriteArraySetWebSocketTest();private static ConcurrentHashMapString, Integer count new ConcurrentHashMapString, Integer();private String userId;/** 与某个客户端的连接会话需要通过它来给客户端发送数据*/private Session session;/*** 连接建立成功调用的方法** param session 可选的参数。session为与某个客户端的连接会话需要通过它来给客户端发送数据*/OnOpenpublic void onOpen(Session session, PathParam(userId) final String userId) {this.session session;this.userId userId;System.out.println(session:session);System.out.println(userId:userId);if (!exitUser(userId)) {initUserInfo(userId);} else {CopyOnWriteArraySetWebSocketTest webSocketTestSet getUserSocketSet(userId);webSocketTestSet.add(this);userCountIncrease(userId);}System.out.println(有 userId 新连接加入当前在线人数为 getCurrUserCount(userId));}/*** 连接关闭调用的方法*/OnClosepublic void onClose() {CopyOnWriteArraySetWebSocketTest webSocketTestSet userwebSocketMap.get(userId);//从set中删除webSocketTestSet.remove(this);//在线数减1userCountDecrement(userId);System.out.println(有一连接关闭当前在线人数为 getCurrUserCount(userId));}/*** 收到客户端消息后调用的方法** param message 客户端发送过来的消息* param session 可选的参数*/OnMessagepublic void onMessage(String message, Session session) {CopyOnWriteArraySetWebSocketTest webSocketSet userwebSocketMap.get(userId);/* System.out.println(来自客户端 userId 的消息: message);//群发消息for (WebSocketTest item : webSocketSet) {try {item.sendMessage(message);} catch (IOException e) {e.printStackTrace();continue;}}*/}/*** 发生错误时调用** param session* param error*/OnErrorpublic void onError(Session session, Throwable error) {System.out.println(发生错误);error.printStackTrace();}/*** 这个方法与上面几个方法不一样。没有用注解是根据自己需要添加的方法。** param message* throws IOException*/public void sendMessage(String message) throws IOException {System.out.println(服务端推送 userId 的消息: message);this.session.getAsyncRemote().sendText(message);}/*** 这个方法与上面几个方法不一样。没有用注解是根据自己需要添加的方法。 我是在有代办消息时 调用此接口 向指定用户发送消息 ** param message* throws IOException*/public void sendMessage(String userId,String message) throws IOException {System.out.println(服务端推送 userId 的消息: message);CopyOnWriteArraySetWebSocketTest webSocketSet userwebSocketMap.get(userId);//群发消息for (WebSocketTest item : webSocketSet) {try {item.session.getBasicRemote().sendText(message);} catch (IOException e) {e.printStackTrace();continue;}}}public boolean exitUser(String userId) {return userwebSocketMap.containsKey(userId);}public CopyOnWriteArraySetWebSocketTest getUserSocketSet(String userId) {return userwebSocketMap.get(userId);}public void userCountIncrease(String userId) {if (count.containsKey(userId)) {count.put(userId, count.get(userId) 1);}}public void userCountDecrement(String userId) {if (count.containsKey(userId)) {count.put(userId, count.get(userId) - 1);}}public void removeUserConunt(String userId) {count.remove(userId);}public Integer getCurrUserCount(String userId) {return count.get(userId);}private void initUserInfo(String userId) {CopyOnWriteArraySetWebSocketTest webSocketTestSet new CopyOnWriteArraySetWebSocketTest();webSocketTestSet.add(this);userwebSocketMap.put(userId, webSocketTestSet);count.put(userId, 1);}}前端实现代码 方法一使用在线websocket客户端 客户端页面使用 http://www.jsons.cn/websocket/ 与项目建立连接充当web客户端 方法二自己编写客户端 !DOCTYPE html html langen headmeta charsetUTF-8titleTitle/title /head body/body scriptlet webSocket null; // 创建一个变量if (WebSocket in window){ // 判断当前的浏览器是否支持WebSocket// 如果支持则创建一个WebSocket赋值给刚才创建的变量// 后面的路径实际上就是一次请求但是这里用的是WebSocket协议// 记住这个地方后面详细讲到怎么写webSocket new WebSocket(ws://localhost:8080/webSocket);}else{ // 如果不兼容则弹框该浏览器不支持alert(该浏览器不支持)}/** * 当WebSocket创建连接(初始化)会触发该方法*/webSocket.onopen function (event){console.log(建立连接) // 这个代表在浏览器打印日志跟Java的System.out.println()意思一致}/** * 当WebSocket关闭时候会触发该方法*/webSocket.onclose function (event){console.log(关闭连接) // 同上}/** * 当WebSocket接受消息会触发该方法*/webSocket.onmessage function (event){console.log(收到消息event.data)}/** * 当WebSocket连接出错触发该方法*/webSocket.onerror function (event){console.log(websocket发生错误);}/** * 页面关闭WebSocket关闭*/window.onbeforeunload function (){webSocket.close();} /script /html
http://www.dnsts.com.cn/news/124951.html

相关文章:

  • 世界上前端做的最好的网站恩施做网站
  • 南昌淘宝网站制作公司极验验证+wordpress
  • 怎么做网站超链接大连企业网站建设
  • 个人域名备案网站名称网站模板怎么弄的
  • 淘宝网站开发源码数据库网站开发外文翻译
  • 免费网站制作软件平台南京网站搜索优化
  • 网站开发需要哪些知识大型集团网站建设公司
  • 网页是网站吗最新网页游戏开服时间表
  • 石嘴山住房和城乡建设厅网站产品代理网
  • 企业电器网站建设方案长沙优化官网公司
  • 群团组织网站建设wordpress 数据库连接文件
  • 沈阳网站建设信息微网站的建设第一步是什么
  • 网站建设和维护视频做分色找工作网站
  • 源美网站建设开发一个电商网站
  • 网站建设应该怎么做医疗ppt模板下载免费完整版
  • 在线设计网站排名网站建设克隆
  • 做房产网站有哪些wordpress视频主题汉化
  • 网站设计师是什么网站备案 是域名还是空间
  • 云南seo简单整站优化wordpress模板yunnut
  • 做网站每一年都要交钱吗校园网站开发的需求和分析
  • 眉山 网站开发滨江区建设局网站
  • 网站备案 企业备案站长工具查询官网
  • 购物网站怎么做代码龙华在深圳算什么档次
  • 天津百度搜索网站排名百度seo公司哪家强一点
  • 深一互联网站建设怎样长沙部分风险区域调整
  • 杭州外贸网站建设网页设计免费模板参考网页
  • 重庆给商家企业做网站免费个人博客注册
  • 自己有域名要怎么制作网站广州外贸公司联系方式
  • 糖果网站建设策划书模板网盘怎么做电影网站
  • wordpress设置投稿厦门seo网站优化