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

做外贸的网站公司沈阳全网推广公司哪家好

做外贸的网站公司,沈阳全网推广公司哪家好,开发app的网站,wordpress好玩的插件其实使用消息队列也可以实现会话&#xff0c;直接前端监听指定的队列&#xff0c;使用rabbitmq的分组还可以实现不同群聊的效果。 1、依赖搭建&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org…

其实使用消息队列也可以实现会话,直接前端监听指定的队列,使用rabbitmq的分组还可以实现不同群聊的效果。

1、依赖搭建:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>org.example</groupId><artifactId>WebStock</artifactId><version>1.0-SNAPSHOT</version><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.8</version><relativePath/></parent><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency></dependencies><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties></project>

SpringBoot都已集成完毕了,不用使用原生的WebStock。

2、配置运行

如果是工作中,要单独起一个服务来操作这个比较好,反正是微服务,多一个少一个没啥的

WebStock连接配置、

package com.quxiao.config;import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.socket.BinaryMessage;
import org.springframework.web.socket.CloseStatus;
import org.springframework.web.socket.TextMessage;
import org.springframework.web.socket.WebSocketSession;
import org.springframework.web.socket.handler.AbstractWebSocketHandler;import java.time.LocalDateTime;/*** ws消息处理类*/
@Component
@Slf4j
public class MyWsHandler extends AbstractWebSocketHandler {@AutowiredWsService wsService;@Overridepublic void afterConnectionEstablished(WebSocketSession session) throws Exception {log.info("建立ws连接");WsSessionManager.add(session.getId(), session);}@Overrideprotected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {log.info("发送文本消息");// 获得客户端传来的消息String payload = message.getPayload();//这里也是一样,要取出前端传来的参数,判断发给谁.这里我就是发给了连接客户端自己.log.info("server 接收到消息 " + payload);wsService.sendMsg(session, "server 发送给的消息 " + payload + ",发送时间:" + LocalDateTime.now().toString());String url = session.getUri().toString();//使用?拼接参数,后端取出判断发给谁System.out.println("获取到的参数:" + url.substring(url.indexOf('?') + 1));}@Overrideprotected void handleBinaryMessage(WebSocketSession session, BinaryMessage message) throws Exception {log.info("发送二进制消息");}@Overridepublic void handleTransportError(WebSocketSession session, Throwable exception) throws Exception {log.error("异常处理");WsSessionManager.removeAndClose(session.getId());}@Overridepublic void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception {log.info("关闭ws连接");WsSessionManager.removeAndClose(session.getId());}
}
package com.quxiao.config;import lombok.extern.slf4j.Slf4j;
import org.springframework.web.socket.WebSocketSession;import java.io.IOException;
import java.util.concurrent.ConcurrentHashMap;@Slf4j
public class WsSessionManager {/*** 保存连接 session 的地方*/public  static ConcurrentHashMap<String, WebSocketSession> SESSION_POOL = new ConcurrentHashMap<>();/*** 添加 session** @param key*/public static void add(String key, WebSocketSession session) {// 添加 sessionSESSION_POOL.put(key, session);}/*** 删除 session,会返回删除的 session** @param key* @return*/public static WebSocketSession remove(String key) {// 删除 sessionreturn SESSION_POOL.remove(key);}/*** 删除并同步关闭连接** @param key*/public static void removeAndClose(String key) {WebSocketSession session = remove(key);if (session != null) {try {// 关闭连接session.close();} catch (IOException e) {// todo: 关闭出现异常处理e.printStackTrace();}}}/*** 获得 session** @param key* @return*/public static WebSocketSession get(String key) {// 获得 sessionreturn SESSION_POOL.get(key);}
}
package com.quxiao.config;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.config.annotation.EnableWebSocket;
import org.springframework.web.socket.config.annotation.WebSocketConfigurer;
import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry;@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {@Autowiredprivate MyWsHandler myWsHandler;@Overridepublic void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {registry.addHandler(myWsHandler, "myWs")//允许跨域.setAllowedOrigins("*");}
}

这里有几个后续逻辑:

(1)、连接时,通过前端的参数或者对其按登陆人信息绑定连接消息。

(2)、收到一个消息,发送给谁就得需要前端传来参数:例如某个群的id,然后通过群绑定人员,因为(1)中通过<key,value>人员id为key,value时连接信息。

直接遍历这个群下面的所有人员id,获取已经连接的信息,发送给他们。这里还要搞一个表存储群消息log。这样其他群员连接时,可以获取到以往的消息。

发送消息工具类

package com.quxiao.config;import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.web.socket.TextMessage;
import org.springframework.web.socket.WebSocketSession;import java.io.IOException;/*** ws操作相关服务*/
@Service
@Slf4j
public class WsServiceUtil {/*** 发送消息* @param session* @param text* @return* @throws IOException*/public void sendMsg(WebSocketSession session, String text) throws IOException {session.sendMessage(new TextMessage(text));}/*** 广播消息* @param text* @return* @throws IOException*/public void broadcastMsg(String text) throws IOException {for (WebSocketSession session: WsSessionManager.SESSION_POOL.values()) {session.sendMessage(new TextMessage(text));}}}

   这里广播我就是遍历了储存连接消息的map容器。

package com.quxiao.controller;import com.quxiao.config.WsServiceUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;import javax.servlet.http.HttpServletRequest;@RestController
@RequestMapping("/put")
public class MessageHandler {@AutowiredWsServiceUtil wsServiceUtil;@PostMapping("/t1/{test}")public void t1(@PathVariable("test") String text) {try {wsServiceUtil.broadcastMsg(Thread.currentThread().getName() + ": " + text);} catch (Exception e) {throw new RuntimeException(e);}}}

3、 前端测试页面:

<!DOCTYPE HTML>
<html>
<head><title>My WebSocket</title>
</head><body>
<input id="text" type="text" />
<button onclick="send()">Send</button>
<button onclick="closeWebSocket()">Close</button>
<div id="message"></div></body><script type="text/javascript">let ws = null;//判断当前浏览器是否支持WebSocketif ('WebSocket' in window) {ws = new WebSocket("ws://localhost:8080/myWs?2002");}else {alert('当前浏览器 Not support websocket')}//连接发生错误的回调方法ws.onerror = function () {setMessageInnerHTML("WebSocket连接发生错误");};//连接成功建立的回调方法ws.onopen = function(event) {console.log("ws调用连接成功回调方法")//ws.send("")}//接收到消息的回调方法ws.onmessage = function(message) {console.log("接收消息:" + message.data);if (typeof(message.data) == 'string') {setMessageInnerHTML(message.data);}}//ws连接断开的回调方法ws.onclose = function(e) {console.log("ws连接断开")//console.log(e)setMessageInnerHTML("ws close");}//将消息显示在网页上function setMessageInnerHTML(innerHTML) {console.log(innerHTML)document.getElementById('message').innerHTML += '接收的消息:' + innerHTML + '<br/>';}//关闭连接function closeWebSocket() {ws.close();}//发送消息function send(msg) {if(!msg){msg = document.getElementById('text').value;document.getElementById('message').innerHTML += "发送的消息:" + msg + '<br/>';ws.send(msg);}}
</script>
</html>

4、总结

所以最重要的是这个消息发给谁

        后端要做的就是需要根据不同的群、人员标识符去发送消息,

前端需要做的就是

        传入不同的标识符,如果是私聊,就得传人员id,如果是群聊,就需要传入群id。

http://www.tj-hxxt.cn/news/93922.html

相关文章:

  • 网站改版提交给百度网店运营推广中级实训
  • PHP网站开发实例教程电子书每日军事新闻
  • 广州做网站海珠新科长沙网站seo优化排名
  • 手机制作app需要什么软件南京网站seo
  • 创建电子商务网站b2b国际贸易平台
  • 电子商务在线网站建设近一周热点新闻
  • 做淘宝优惠券怎么有网站网站seo关键词优化排名
  • 万户网络做网站免费平台
  • 公路建设市场信用信息系统网站长沙竞价优化
  • 个人做跨境电商网站nba最新交易汇总实时更新
  • 仿网站制作教学视频微信小程序怎么开通
  • 北京保障性住房建设投资中心网站搜索引擎优化seo
  • 宁波随身云网络科技有限公司重庆自动seo
  • 淄博招聘网宁波seo推广方式排名
  • 快站微信网站制作建站公司
  • 网站建设搭建是什么意思快手秒赞秒评网站推广
  • 个人网站子域名设置网站推广方案有哪些
  • 滑坡毕业设计代做网站谷歌站长平台
  • 网站买卖需要注意什么如何写软文赚钱
  • 企业网站展示免费宣传平台
  • 做游戏网站的需求分析做网站优化推广
  • 山西省工程建设标准定额网站搜索引擎营销成功案例
  • 大型银行网站建设搜狗推广助手
  • 如何汇报网站建设优化网络软件
  • 自己有网站 做appseo教育培训机构
  • app开发公司天品科技厦门seo网站优化
  • 双鸭山建设局网站网络营销与传统营销有哪些区别
  • 做货源的网站百度推广官方电话
  • 中小企业网站建设维护内容安卓优化大师破解版
  • 网站推广企业域名注册人查询