Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spingboot网袜跺脚_Java_Spring_Spring Boot_Websocket_Rabbitmq - Fatal编程技术网

Java Spingboot网袜跺脚

Java Spingboot网袜跺脚,java,spring,spring-boot,websocket,rabbitmq,Java,Spring,Spring Boot,Websocket,Rabbitmq,有谁能告诉我,如果服务器端实现使用的是stomp WebSocket,那么客户端是否也需要实现stomp 我正在尝试实现一个spring引导应用程序,我不知道应该使用还是不使用stomp实现。根据我的研究,我了解到,如果您想扩展应用程序,最好使用stomp和嵌入式代理(例如RabbitMQ),因为它将处理会话、心跳等,而不是内存中的代理 在线提供的示例仅显示了使用和不使用stomp的实现 我基本上是在客户机请求时从表中获取不同的数据集,并不断地写入WebSocket 有人能确认我目前的理解是否正

有谁能告诉我,如果服务器端实现使用的是stomp WebSocket,那么客户端是否也需要实现stomp

我正在尝试实现一个spring引导应用程序,我不知道应该使用还是不使用stomp实现。根据我的研究,我了解到,如果您想扩展应用程序,最好使用stomp和嵌入式代理(例如RabbitMQ),因为它将处理会话、心跳等,而不是内存中的代理

在线提供的示例仅显示了使用和不使用stomp的实现

我基本上是在客户机请求时从表中获取不同的数据集,并不断地写入WebSocket

  • 有人能确认我目前的理解是否正确吗
  • 如果我使用stomp+websocket,我必须注意哪些基本事项
  • 更新下面的用例:

    用户登录时,移动客户端将显示图表。左侧面板中会有销售、折扣等链接,点击后,请求将通过websocket渠道到达服务器。服务器将检查请求中的数据类型,使用DB中的数据生成模型,并将数据写入websocket

    更新代码-v1 MyWebSocketHandler:

    @Component
    public class MyWebSocketHandler extends TextWebSocketHandler {
    
        Logger logger = LoggerFactory.getLogger(getClass());
    
        @Autowired
        DashboardUtil dashboardutil;
    
        @Resource(name = "socketSessionsMap")
        private Map<String, WebSocketSession> socketSessionsMap;
    
        @Override
        public void handleTextMessage(WebSocketSession session, TextMessage message)
                throws InterruptedException, IOException {
    
            try {
                //Gets the socket session from map and writes a json to that socket - did for testing purpose.
                socketSessionsMap.put("session", session);
                //String payload = message.getPayload();
    
                String jsonString = dashboardutil.getDataInJSON(); // gets hardcoded json model
                session.sendMessage(new TextMessage(jsonString));
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
        @Override
        public void afterConnectionEstablished(WebSocketSession session) throws Exception {
    
        }
    
        @Override
        public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception {
    
        }
    }
    
    有人能告诉我服务器端实现是否使用stomp吗 WebSocket,客户端是否也需要实现stomp

    您可以在web套接字配置中注册多个处理程序。所以在理论上,您可以为STOMP提供一个处理程序,为plainwebsocket提供另一个处理程序。如果只提供STOMP处理程序,那么来自标准web套接字客户端的握手将失败

    根据我的研究,我了解到,如果你想扩展应用程序, 最好使用stomp和嵌入式代理(例如RabbitMQ)作为它的代理 将处理会话、心跳等,而不是内存中的 经纪人

    没错。STOMP还提供了一些更好的特性,特别是对某些端点的订阅

    我基本上是在尝试从表中获取不同的数据集 客户端不断请求并写入WebSocket

    这是一个非常简单的描述。。。 您应该考虑是否需要跨多个实例共享会话,或者是否需要在web套接字会话之间发送消息。
    根据您的描述,听起来您只是接受了一个web套接字连接,并不断地将数据推送到客户端。如果您想扩展此应用程序,只需在实例前面放置一个负载平衡器,就可以了。

    我认为客户端使用的是基本WS。我肯定还有其他的事情要考虑,但我不知道这些是什么。我提到了WebSocket通信中涉及的一些概念。因此,问题2。我还没有考虑处理会议。首先,我需要知道的是,我是否应该使用WebSocketConfiger或WebSocketMessageBrokerConfiger或AbstractSessionWebSocketMessageBrokerConfiger扩展我的WebSocketConfig类,以便向您简要介绍用例。用户登录时,客户端将显示图表。左侧面板中会有销售、折扣等链接,点击后,请求将通过websocket渠道到达服务器。服务器将检查请求中的数据类型,从DB生成数据并将数据写入websocket。你能建议我应该怎么做吗?@continuousLearner如果客户机使用的是基本web套接字,那么你也应该在服务器中为基本web套接字实现一个处理程序。否则服务器将不接受握手。因此,如果您无法更改客户端,那么您就没有其他选择。另外,您的用例听起来基本websocket适合您的用例。其次,当你说基本websocket时,你指的是websocket配置器吗?使用代码更新问题。使用基本web套接字,我指的是默认协议。是的,您可以使用
    WebSocketConfigurer
    在那里注册处理程序。如果要使用STOMP这样的子协议,则必须在
    AbstractWebSocketMessageBrokerConfigure
    中注册STOMP端点。
    @Configuration
    @EnableWebSocket
    public class WebSocketConfig implements WebSocketConfigurer {
    
        @Autowired
        private MyWebSocketHandler myWebSocketHandler;
    
        @Override
        public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
             registry.addHandler(myWebSocketHandler, "/socketHandler").setAllowedOrigins("*").withSockJS();
    
        }
    }