微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

springcloud-gateway转发websocket

一,前端页面

  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);
    }
}

 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐