ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

springcloud-gateway转发websocket

2022-01-27 10:34:58  阅读:479  来源: 互联网

标签:websocket springcloud void public session msg new gateway


一,前端页面

  1.原生请求

//建立连接
this.websocket = new WebSocket('ws://localhost:8085/websocket/user?token='+auth);
  //接收
   this.websocket.onmessage = function(e){
     console.log(e.data);
   }
//发送
this.websocket.send(text);

 

  2.sockJS请求

//建立连接
var sock = new SockJS('http://localhost:8085/websocket',null,{timeout: 30000});
var stomp = Stomp.over(sock);
var headers = {
login: 'mylogin',
passcode: 'mypasscode',
'client-id': 'my-client-id',
'Authorization':auth};
stomp.connect(headers,
    function(frame){    
//订阅主题 stomp.subscribe('/user/updateInfo',(resp)=>{ console.log(resp.body); resp.ack(); });
//发送 stomp.send("/user", {'Authorization': auth},payload);

 

二,gateway配置


spring:
  cloud:
    gateway:
      routes:
      # SockJS首次info路由
      - id: websocket_sockjs_route
        uri: lb://testService
        predicates:
        - Path=/websocket/info/**
      # Websocket原生路由
      - id: websocket_route
        uri: lb:ws://testService
        predicates:
        - Path=/websocket/**

 

三,服务端

  1.tomcat实现

@Configuration
public class WebsocketConfig {

    @Bean
    public ServerEndpointExporter serverEndpointExporter( ) {
       return new ServerEndpointExporter();
    }
}

@Component
@ServerEndpoint("/websocket/user")
public class WebsocketController {

    Session testSession = null;

    @OnOpen
    public void onOpen(Session session){

        testSession = session;

        System.out.println("ws connected!!");
        sendMessage("ws connected!!");
    }

    @OnMessage
    public void onMessage(String msg,Session session){
        System.out.println("msg '" +msg+ "' received!!");

        try {
            sendMessage("msg '" +msg+ "' received!");
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

    public void sendMessage(String msg) {
        try {
            this.testSession.getBasicRemote().sendText(msg);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    @OnClose
    public void onClose(Session session){
        System.out.println("ws closed!!");
    }

}

 

  2.spring实现

  

@Configuration
@EnableWebSocket
public class WebsocketSpringConfig implements WebSocketConfigurer {



    @Override
    public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
        registry.addHandler(new WebsocketSpringController(),"/websocket/user").addInterceptors(new WebsocketInterceptor()).setAllowedOrigins("http://localhost");
    }
}

public class WebsocketInterceptor implements HandshakeInterceptor {
    @Override
    public boolean beforeHandshake(ServerHttpRequest serverHttpRequest, ServerHttpResponse serverHttpResponse, WebSocketHandler webSocketHandler, Map<String, Object> map) throws Exception {
        map.put("token","");
        return true;
    }

    @Override
    public void afterHandshake(ServerHttpRequest serverHttpRequest, ServerHttpResponse serverHttpResponse, WebSocketHandler webSocketHandler, Exception e) {
    }
}


public class WebsocketSpringController extends TextWebSocketHandler {

    private final String charset = "UTF-8";
    private WebSocketSession session;

    @Override
    public void afterConnectionEstablished(WebSocketSession session) throws Exception {
        this.session = session;
        System.out.println(session);
        session.sendMessage(new TextMessage("connected..."));

    }

    @Override
    protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
        String payload = message.getPayload();
        System.out.println(payload);
        session.sendMessage(new TextMessage("received:" + payload));

    }

    @Override
    public void handleTransportError(WebSocketSession session, Throwable exception) throws Exception {
        super.handleTransportError(session, exception);
    }

    @Override
    public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception {
        super.afterConnectionClosed(session, status);
    }
}

 

标签:websocket,springcloud,void,public,session,msg,new,gateway
来源: https://www.cnblogs.com/uip001/p/15848937.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有