• WebSocket-java实践


    websocket  主要用于  前端页面hmtl/jsp 与 后端进行socket得连接。

    本例简单实现:一但后端接收到数据或者根据某些规则主动发送数据,那么可以根据不同用户等区别,发送给某个登陆得页面上。

    WebSocketConfig 类

    package 

    import javax.annotation.Resource;

    import org.springframework.context.annotation.Configuration;
    import org.springframework.web.servlet.config.annotation.EnableWebMvc;
    import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
    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
    @EnableWebMvc
    @EnableWebSocket
    public class WebSocketConfig extends WebMvcConfigurerAdapter implements WebSocketConfigurer {

      @Resource

           Jim_Handler handler;

         

      @Override
      public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {

        registry.addHandler(handler, "/websocket.do").setAllowedOrigins("*").addInterceptors(new JimHandShake());
        registry.addHandler(handler, "/websocket/sockjs.do").addInterceptors(new JimHandShake()).withSockJS();

      }

    }

    Jim_Handler 类

    @Component
    public classJim_Handler  implements WebSocketHandler{

    public static final List<WebSocketSession> sessionList;

    static{
    sessionList = new ArrayList<WebSocketSession>();
    }

    @Override
    public void afterConnectionClosed(WebSocketSession session, CloseStatus arg1)
    throws Exception {
    boolean flag = false;
    for (int i=0;i<sessionList.size();i++) {
    if(session.getId().equals(sessionList.get(i).getId())){
    flag = true;
    break;
    }
    }
    if(flag){
    sessionList.remove(session);
    }
    }

    @Override
    public void afterConnectionEstablished(WebSocketSession session)
    throws Exception {
    sessionList.add(session);

    }

    @Override
    public void handleMessage(WebSocketSession arg0, WebSocketMessage<?> arg1)
    throws Exception {
    // TODO Auto-generated method stub

    }

    @Override
    public void handleTransportError(WebSocketSession arg0, Throwable arg1)
    throws Exception {
    // TODO Auto-generated method stub

    }

    @Override
    public boolean supportsPartialMessages() {
    // TODO Auto-generated method stub
    return false;
    }

    public void sendMessageToAllClients(final TextMessage message) throws IOException{
    for (int i = 0; i < sessionList.size(); i++) {
    WebSocketSession session = sessionList.get(i);
    if (session.isOpen()) {
    session.sendMessage(message);
    }
    }
    }

    }

    JimHandShake 类

    import java.util.Map;

    import org.springframework.http.server.ServerHttpRequest;
    import org.springframework.http.server.ServerHttpResponse;
    import org.springframework.web.socket.WebSocketHandler;
    import org.springframework.web.socket.server.HandshakeInterceptor;

    public class JimHandShake implements HandshakeInterceptor{

    @Override
    public void afterHandshake(ServerHttpRequest arg0, ServerHttpResponse arg1,
    WebSocketHandler arg2, Exception arg3) {

    }

    @Override
    public boolean beforeHandshake(ServerHttpRequest request,
    ServerHttpResponse arg1, WebSocketHandler arg2,
    Map<String, Object> attributes) throws Exception {
    return true;
    }

    }

    发送消息(任何类

    @Resource
    private JimHandler jHandler;

    S s = new S("1","2");

    TextMessage textMessage = new TextMessage(JSON.toJSONString(s));
    jHandler.sendMessageToAllClients(textMessage);

    前端发送请求

    //websocket初始化
    var websocket;
    var path = '<%=basePath_websocket%>'; //10.0.1.1:8080
    if ('WebSocket' in window) {
    websocket = new WebSocket("ws://" + path + "/websocket/.do");
    } else if ('MozWebSocket' in window) {
    websocket = new MozWebSocket("ws://" + path + "/websocket.do");
    } else {
    websocket = new SockJS("http://" + path + "/socket/sockjs.do");
    }

    //websocket 连接
    websocket.onopen = function(event) {
      console.log("WebSocket:已连接");
    };
    //websocket通信时
    websocket.onmessage = function(event) {

        event.data

    }

    //socket连接出错
    websocket.onerror = function(event) {

      layer.msg('socket连接出错');

    };
    //断开socket连接
    websocket.onclose = function(event) {

      layer.msg('socket连接断开');

    };

          

  • 相关阅读:
    Flutter之CupertinoSwitch和Switch开关组件的简单使用
    docker的/var/run/docker.sock参数
    Elasticsearch _reindex Alias使用
    json_decode的结果是null
    1.1-1.4 hadoop调度框架和oozie概述
    1.8-1.10 大数据仓库的数据收集架构及监控日志目录日志数据,实时抽取之hdfs系统上
    1.6-1.7 定义agent 读取日志存入hdfs
    zabbix监控华为交换机
    1.1-1.5 flume架构概述及安装使用
    1.16 sqoop options-file参数进行运行任务
  • 原文地址:https://www.cnblogs.com/loadL/p/webSocket.html
Copyright © 2020-2023  润新知