zoukankan      html  css  js  c++  java
  • springBoot环境下创建webSocket服务端和客户端

    1.pom文件导入依赖

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

    2.创建webSocket相关配置

    package com.example.demo.mainDemo;
    
    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;
    
    @Configuration
    @EnableWebSocket
    public class WebSocketConfig implements WebSocketConfigurer {
    @Override
    public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
    registry.addHandler(myHandler(), "myHandler").setAllowedOrigins("*");
    }
    public WebSocketHandler myHandler() {
    return new MyHandler();
    }
    
    }

    3.编写webSocket处理类,类似controller接口

    package com.example.demo.mainDemo;
    
    import com.alibaba.fastjson.JSONObject;
    import org.springframework.web.socket.TextMessage;
    import org.springframework.web.socket.WebSocketSession;
    import org.springframework.web.socket.handler.TextWebSocketHandler;
    
    import java.util.HashMap;
    import java.util.Map;
    
    /**
    * 相当于controller的处理器
    */
    public class MyHandler extends TextWebSocketHandler {
    @Override
    protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
    String payload = message.getPayload();
    // Map<String, String> map = JSONObject.parseObject(payload, HashMap.class);
    // System.out.println("=====接受到的数据"+map);
    session.sendMessage(new TextMessage("服务器返回收到的信息," + payload));
    }
    }



    4.编写客户端

    package com.example.demo.mainDemo.client;
    
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    import javax.websocket.*;
    
    @ClientEndpoint
    public class MyClient {
    private static Logger logger = LoggerFactory.getLogger(MyClient.class);
    private Session session;
    @OnOpen
    public void open(Session session){
    logger.info("Client WebSocket is opening...");
    this.session = session;
    }
    
    @OnMessage
    public void onMessage(String message){
    logger.info("Server send message: " + message);
    }
    
    @OnClose
    public void onClose(){
    logger.info("Websocket closed");
    }
    
    /**
    * 发送客户端消息到服务端
    * @param message 消息内容
    */
    public void send(String message){
    this.session.getAsyncRemote().sendText(message);
    }
    }

    5.创建main方法

    package com.example.demo.mainDemo.client;
    
    import javax.websocket.ContainerProvider;
    import javax.websocket.WebSocketContainer;
    import java.net.URI;
    
    public class ClientStart {
    public static void main(String[] args){
    try {
    WebSocketContainer container = ContainerProvider.getWebSocketContainer();
    MyClient client = new MyClient();
    container.connectToServer(client, new URI("ws://127.0.0.1:8080/myHandler"));
    // container.setDefaultMaxSessionIdleTimeout(5000L);
    int turn = 0;
    while(turn++ < 10){
    client.send("client send: 客户端消息 " + turn);
    Thread.sleep(1000);
    }
    }catch (Exception e){
    e.printStackTrace();
    }
    }
    }

    6.执行main方法

    OVER
    ————————————————
    版权声明:本文为CSDN博主「官萧何」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/qq_25613413/article/details/100019875

  • 相关阅读:
    C++中虚继承的作用
    游戏程序设计学习初窥简单DirectX代码实现
    vue4.x更改默认端口 larry
    Visual studio 2010几个比较酷的功能
    Web前端编程:勿混淆NodeList与Array
    代码规范之署名
    一则中文文件名引起的问题
    C# WebService调用及数据并行处理
    2010年终总结
    关于DotNetNuke
  • 原文地址:https://www.cnblogs.com/guanxiaohe/p/11727433.html
Copyright © 2011-2022 走看看