`
lippeng
  • 浏览: 450859 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Spring Web Socket 客户端 服务端实现 握手时传递参数

    博客分类:
  • Life
阅读更多

基于Spring boot的非常简单的WebSocket客户端与服务端通信,真心不想写Socket,用Netty写着太累,真心没多少时候需要那么好的性能。

 

在握手时,试着传个参数,发现没问题,整体用起来,Spring的东西很靠谱。

 

服务端:

 

import com.google.common.base.Strings;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.http.server.ServerHttpRequest;
import org.springframework.http.server.ServerHttpResponse;
import org.springframework.http.server.ServletServerHttpRequest;
import org.springframework.stereotype.Component;
import org.springframework.web.socket.TextMessage;
import org.springframework.web.socket.WebSocketHandler;
import org.springframework.web.socket.WebSocketSession;
import org.springframework.web.socket.config.annotation.EnableWebSocket;
import org.springframework.web.socket.config.annotation.WebSocketConfigurer;
import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry;
import org.springframework.web.socket.handler.TextWebSocketHandler;
import org.springframework.web.socket.server.HandshakeInterceptor;

import java.util.Map;

@SpringBootApplication
public class MyWebSocketServer {
  public static void main(String[] args) {
    SpringApplication.run(MyWebSocketServer.class, args);
  }

  @Component
  @EnableWebSocket
  private static class Config implements WebSocketConfigurer {
    @Override
    public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
      registry.addHandler(new MyHandler(), "/ws").setAllowedOrigins("*")
          .addInterceptors(new MyHandshakeInterceptor());
    }
  }

  private static class MyHandler extends TextWebSocketHandler {
    @Override
    public void afterConnectionEstablished(WebSocketSession session) throws Exception {
      System.out.println(session.getAttributes().get("collector"));
      super.afterConnectionEstablished(session);
    }

    @Override
    protected void handleTextMessage(WebSocketSession session, TextMessage message)
        throws Exception {
      System.out.println(message.getPayload());
      session.sendMessage(new TextMessage("reply.................." + message.getPayload()));
      super.handleTextMessage(session, message);
    }
  }

  private static class MyHandshakeInterceptor implements HandshakeInterceptor {
    @Override
    public boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse response,
                                   WebSocketHandler wsHandler, Map<String, Object> attributes)
        throws Exception {

      String collector = ((ServletServerHttpRequest) request).getServletRequest().getParameter("collector");
      if (Strings.isNullOrEmpty(collector)) {
        return false;
      } else {
        attributes.put("collector", collector);
        return true;
      }
    }

    @Override
    public void afterHandshake(ServerHttpRequest request, ServerHttpResponse response,
                               WebSocketHandler wsHandler, Exception exception) {

    }
  }
}

 

客户端:

 

import org.springframework.web.socket.TextMessage;
import org.springframework.web.socket.WebSocketSession;
import org.springframework.web.socket.client.WebSocketConnectionManager;
import org.springframework.web.socket.client.standard.StandardWebSocketClient;
import org.springframework.web.socket.handler.TextWebSocketHandler;

import java.io.IOException;

public class MyWebSocketClient {
  private static final String WS_URI = "ws://localhost:8080/ws?collector=123";

  public static void main(String[] args) throws IOException, InterruptedException {
    StandardWebSocketClient client = new StandardWebSocketClient();
    WebSocketConnectionManager manager = new WebSocketConnectionManager(client, new MyHandler(), WS_URI);

    manager.start();

    Thread.sleep(10000);
  }

  private static class MyHandler extends TextWebSocketHandler {
    @Override
    public void afterConnectionEstablished(WebSocketSession session) throws Exception {
      System.out.println("connected...........");
      session.sendMessage(new TextMessage("hello, web socket"));
      super.afterConnectionEstablished(session);
    }

    @Override
    protected void handleTextMessage(WebSocketSession session, TextMessage message)
        throws Exception {
      System.out.println("receive: " + message.getPayload());
      super.handleTextMessage(session, message);
    }
  }
}

 

0
4
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics