IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 基于stomp协议的websocket -> 正文阅读

[网络协议]基于stomp协议的websocket

1.依赖

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

2.配置文件

@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {

/***
 * 注册 Stomp的端点 addEndpoint:添加STOMP协议的端点。提供WebSocket或SockJS客户端访问的地址
 * 这里没有使用SockJS协议,因为该协议只支持文本消息,启用了WebSocket的访问地址
 * 
 * @param registry
 */
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
	registry.addEndpoint("/message").setAllowedOrigins("*");
}

@Override
public void configureWebSocketTransport(WebSocketTransportRegistration registry) {
	// 设置最大消息发送长度为5m
	registry.setMessageSizeLimit(1024 * 1024 * 5);
	registry.setSendBufferSizeLimit(1024 * 1024 * 5);
	registry.setSendTimeLimit(2000);
}

/**
 * 配置消息代理 启动Broker,消息的发送的地址符合配置的前缀来的消息才发送到这个broker
 */
@Override
public void configureMessageBroker(MessageBrokerRegistry registry) {
	registry.enableSimpleBroker("/topic");// 推送消息前缀
	registry.setApplicationDestinationPrefixes("/topic");// 应用请求前缀
	registry.setUserDestinationPrefix("/user");// 推送用户前缀
}
}

3.Controller 消息控制器

	@Api(tags = "消息控制器")
	@RestController
	public class MessageController {
	    @Autowired
	    private IMessageService service;
	
	    /**
	     * 字节传输  接受前端传输过来的数据
	     * 有效载荷
	     *
	     * @throws Exception
	     */
	    @MessageMapping("/server/byte")
	    public void subscribeByte(@Headers Map<String, Object> headers, String s) {
	        System.out.println(s);
	        service.subscribeByte(headers, s);
	    }
	
	
	    @Autowired
	    private SimpMessagingTemplate messagingTemplate;
	
	    /**
	     * 主动通过socket发数据给前端,模拟由硬件或算法调用该接口
	     *
	     * @param headers
	     * @param s
	     */
	    @PostMapping("/server/aa")
	    public void subscribeByte1(@Headers Map<String, Object> headers, String s) {
	//
	        new Thread(new Msg(s, messagingTemplate)).start();
	//		service.subscribeByte(headers, s);
	    }
	
	    /**
	     * 定义传输类
	     */
	    public class Msg implements Runnable {
	
	        private String msg;
	        private SimpMessagingTemplate messagingTemplate;
	
	        public Msg(String msg, SimpMessagingTemplate messagingTemplate) {
	            this.msg = msg;
	            this.messagingTemplate = messagingTemplate;
	        }
	
	        @Override
	        public void run() {
	            this.messagingTemplate.convertAndSend("/topic/anquanmao", msg);
	        }
	    }
	}

4.html 连接socket

				<!DOCTYPE html>
		<html>
		<head>
		<meta charset="UTF-8">
		<title>demo</title>
		</head>
		<body>
		<h3>选择一张图片并通过websocket发送到后台</h3>
		<input accept="image/*" type="text" id="file">
		<br/>
		<h3>后台会实时通过websocket把图片回传(可以把本页面打开两个以测试效果)</h3>
		<div style="width: 800px; height: 600px;">
		<img alt="" id="img" width="800" height="600" src=""/>
		</div>
		</body>
		<script type="text/javascript" src="js/jquery-2.1.4.min.js"></script>
		<script type="text/javascript" src="js/stomp.js"></script>
		<script type="text/javascript" src="js/websocket.js"></script>
		<script type="text/javascript">
		
			// !!!!不是原生的WebSoceket,使用的spring-boot-starter-websocket包,基于STOMP协议的WebSocket
			
			//websocket链接成功后回调
			function init(websocket){
				$("#file").change(function(){
				    console.log($(this)[0].innerHtml)
					// var objectURL=URL.createObjectURL($(this)[0].files[0]);
					// console.log(objectURL);
					// var reader = new FileReader();
			        // reader.onloadend=function() {
			        // 	if(reader.result.byteLength>0){
				    //         //reader.result是一个含有视频数据流的Blob对象
				    //         var buf = new Uint8Array(reader.result);
		            //
				    //         //如果发送字节消息,第三个参数设置true
				    //         websocket.send("/topic/server/byte",buf,true);
				    //         console.log(">>> 已发送");
			        // 	}
			        // };
			        // reader.readAsArrayBuffer($(this)[0].files[0]);
		            var value = $("#file").val()
		            websocket.send("/topic/server/byte",value); //controller ->@MessageMapping("/server/byte")地址
		            console.log(">>> 已发送");
				});
				//订阅一个topic
				websocket.subscribe("/topic/node",function(msg){
					console.log(msg);
					//字节消息
					if(msg.isByte){
		 			  	// var blob = new Blob([msg.body], { type: "image/jpg" });
		 			  	// var objectURL = URL.createObjectURL(blob);
		 			  	// $("#img").prop("src",objectURL);
		 			  	// setTimeout(function(){
		 			  	// 	URL.revokeObjectURL(objectURL);
		 	 			//   	msg.body=null;
		 			  	// },1000);
					}
				});
			}
		
		</script>
		
		</html>
  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-03-03 16:49:22  更:2022-03-03 16:52:03 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 8:16:27-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码