zoukankan      html  css  js  c++  java
  • websocket入门与分布式websocket

    1. websocket整合的几种方式

    原文:https://www.cnblogs.com/kiwifly/p/11729304.html

    • 使用Tomcat的websocket
    • 使用Spring封装的websocket
    • 使用TOMP封装的websocket

    关于使用TOMP封装的websocket

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-websocket</artifactId>
    </dependency>
    
    @Configuration
    @EnableWebSocketMessageBroker
    public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {
    
        // registerStompEndpoints 方法来设置暴露的 stomp 的路径,其它一些跨域、客户端之类的设置。
        @Override
        public void registerStompEndpoints(StompEndpointRegistry registry) {
            // 配置客户端尝试连接地址
            registry.addEndpoint("/ws").setAllowedOrigins("*").withSockJS();
        }
    
        // 进行节点的配置
        @Override
        public void configureMessageBroker(MessageBrokerRegistry registry) {
            // 设置广播节点
            registry.enableSimpleBroker("/topic", "/user");
    
            // 客户端向服务端发送消息需有/app 前缀
            registry.setApplicationDestinationPrefixes("/app");
    
            // 指定用户发送(一对一)的前缀 /user/
            registry.setUserDestinationPrefix("/user/");
        }
    }
    
    @Controller
    public class WSController {
    
        @Autowired
        private SimpMessagingTemplate simpMessagingTemplate;
    
        // @MessageMapping 用来暴露节点路径,客户端可以访问这里的hello,但是我们客户端调用的真正地址是 /app/hello。 因为我们在上面的 config 里配置了registry.setApplicationDestinationPrefixes("/app")
        @MessageMapping("/hello")
        // @SendTo这个注解会把返回值的内容发送给订阅了 /topic/hello 的客户端,与之类似的还有一个@SendToUser 只不过他是发送给用户端一对一通信的
        @SendTo("/topic/hello")
        public ResponseMessage hello(RequestMessage requestMessage) {
            System.out.println("接收消息:" + requestMessage);
            return new ResponseMessage("服务端接收到你发的:" + requestMessage);
        }
    
        @GetMapping("/sendMsgByUser")
        @ResponseBody 
        public Object sendMsgByUser(String token, String msg) {
            // 发送消息     联系到我们上文配置的 registry.setUserDestinationPrefix("/user/"),这里客户端订阅的是/user/{token}/msg,千万不要搞错。
            simpMessagingTemplate.convertAndSendToUser(token, "/msg", msg);
            return "success";
        }
    
        @GetMapping("/sendMsgByAll")
        @ResponseBody
        public Object sendMsgByAll(String msg) {
            simpMessagingTemplate.convertAndSend("/topic", msg);
            return "success";
        }
    
        @GetMapping("/test")
        public String test() {
            return "test-stomp.html";
        }
    }
    
  • 相关阅读:
    将Moba的输出导出为文件
    MyBatis入参为0时失效问题
    (笔记)交大电院MEM提前面试优秀经验分享【附面试流程及规则】
    (笔记)GPIO基本原理与寄存器配置(STM32篇)
    (笔记)高速电路板完美走线的诀窍
    使用 python 收集 kubernetes events 并写入 elasticsearch
    java使用io.kubernetes.client-java调用k8s api创建pod/service/ingress示例
    中英文逗号空格分隔符正则式
    SpringCloud学习一-搭建netflix-eureka微服务集群
    Spring 中经典的 9 种设计模式,打死也要记住啊!
  • 原文地址:https://www.cnblogs.com/itlihao/p/14998453.html
Copyright © 2011-2022 走看看