wuliangji_1 2019-11-10 11:44 采纳率: 0%
浏览 138

webservices报连接重置

webservices服务端部署到本地和跟客户端同一个ip段的服务器上边没有问题,部署到与客户端不是同一个客户端会出现连接重置,但是用接口工具测试没有问题

  • 写回答

1条回答

  • 一码归一码@ 2023-12-06 10:16
    关注
    package com.web.main.core.monitor.controller;
    
    import com.fasterxml.jackson.databind.ObjectMapper;
    import com.mongodb.client.MongoCursor;
    import com.web.common.constant.MainConstant;
    import com.web.common.utils.JDBCUtils;
    import com.web.main.core.monitor.utils.MongoUtils;
    import com.web.monitor.app.ServerConfig;
    import com.web.monitor.entity.SysCoreServerEntity;
    import com.web.monitor.service.MonitorService;
    import lombok.extern.slf4j.Slf4j;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.core.env.Environment;
    import org.springframework.data.domain.Sort;
    import org.springframework.data.mongodb.core.MongoTemplate;
    import org.springframework.data.mongodb.core.aggregation.Aggregation;
    import org.springframework.data.mongodb.core.aggregation.LookupOperation;
    import org.springframework.data.mongodb.core.aggregation.MatchOperation;
    import org.springframework.data.mongodb.core.query.Criteria;
    import org.springframework.data.mongodb.core.query.Query;
    import org.springframework.scheduling.TaskScheduler;
    import org.springframework.stereotype.Component;
    import org.springframework.util.CollectionUtils;
    
    import javax.annotation.Resource;
    import javax.servlet.http.HttpServletRequest;
    import javax.websocket.*;
    import javax.websocket.server.PathParam;
    import javax.websocket.server.ServerEndpoint;
    import java.text.SimpleDateFormat;
    import java.util.*;
    import java.util.concurrent.ConcurrentHashMap;
    import java.util.concurrent.ScheduledFuture;
    import java.util.stream.Collectors;
    
    @Slf4j
    @Component
    @ServerEndpoint("/websocket/main/core/{userId}")
    public class HomePageController {
        //记录连接的客户端
        public static Map<String, Session> clients = new ConcurrentHashMap<>();
    
        /**
         * userId关联sid(解决同一用户id,在多个web端连接的问题)
         */
        public static Map<String, Set<String>> conns = new ConcurrentHashMap<>();
    
        private String sid = null;
    
        private String userId;
    
        private Session session;
    
        private static TaskScheduler taskScheduler;
    
    
        private static Environment environment;
    
        private static Map<String, ScheduledFuture> scheduledFutures = new ConcurrentHashMap<>();
        @Resource
        private HttpServletRequest httpServletRequest;
    
    
    
        public MonitorService getMonitorService() {
            return monitorService;
        }
    
    
        @Autowired
        public void setMonitorService(MonitorService monitorService) {
            this.monitorService = monitorService;
        }
    
        public Environment getEnvironment() {
            return environment;
        }
    
        @Autowired
        public void setEnvironment(Environment environment) {
            HomePageController.environment = environment;
        }
    
    
        public ServerConfig getServerConfig() {
            return this.serverConfig;
        }
    
        @Autowired
        public void setServerConfig(ServerConfig serverConfig) {
            this.serverConfig = serverConfig;
        }
    
    
        public HttpServletRequest getHttpServletRequest() {
            return httpServletRequest;
        }
    
        @Autowired
        public void setHttpServletRequest(HttpServletRequest httpServletRequest) {
            this.httpServletRequest = httpServletRequest;
        }
    
        public TaskScheduler getTaskScheduler() {
            return taskScheduler;
        }
    
        @Autowired
        public void setTaskScheduler(TaskScheduler taskScheduler) {
            this.taskScheduler = taskScheduler;
        }
    
        /**
         * 连接成功后调用的方法
         *
         * @param session
         * @param userId
         */
        @OnOpen
        public void onOpen(Session session, @PathParam("userId") String userId) {
            this.sid = UUID.randomUUID().toString();
            this.userId = userId;
            clients.put(this.sid, session);
            Set<String> clientSet = conns.get(userId);
            if (clientSet == null) {
                clientSet = new HashSet<>();
                conns.put(userId, clientSet);
            }
            clientSet.add(this.sid);
            log.info(this.sid + "连接开启!");
            sendMessage(session);
        }
    
        /**
         * 连接关闭调用的方法
         */
        @OnClose
        public void onClose(Session session) {
            log.info(this.sid + "连接断开!");
            clients.remove(this.sid);
        }
    
        /**
         * 收到客户端消息后调用的方法
         *
         * @param message
         * @param session
         */
        @OnMessage
        public void onMessage(String message, Session session) {
            session.setMaxIdleTimeout(10 * 1000L);
            log.info("session续期");
            sendMessage(session);
        }
    
        private void sendMessage(Session session) {
            ObjectMapper objectMapper = new ObjectMapper();
           
                session.getBasicRemote().sendText(objectMapper.writeValueAsString(result));
            } catch (Exception e) {
                e.printStackTrace();
            }
    
        }
    
       
    
        /**
         * 发生错误时的回调函数
         *
         * @param error
         */
        @OnError
        public void onError(Throwable error) {
            error.printStackTrace();
        }
    
    }
    
    评论

报告相同问题?

悬赏问题

  • ¥100 有人会搭建GPT-J-6B框架吗?有偿
  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名