Spin gboot Websocket Stomp

问题描述 投票:0回答:1

谁能告诉我服务器端实现是否正在使用stomp WebSocket,客户端是否也应该实现stomp?

我正在尝试实现Spring Boot应用程序,无论是否采用stomp实现,我都很困惑。从我的研究中,我了解到,如果您想扩展应用程序,最好使用重载和嵌入式代理(例如RabbitMQ),因为它将处理会话,心跳等,而不是内存中的代理。

在线提供的示例仅显示带有或不带有踩踏的实现。

我基本上是应客户端请求从表中获取不同的数据集,并连续写入WebSocket。

  1. 任何人都可以确认我到目前为止的理解是否正确?
  2. 如果我踩踏+ websocket,我将需要处理哪些基本事项?

更新以下用例:

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

更新代码-v1MyWebSocketHandler:

@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 {

    }
}

WebSecurityConfig:

@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {

    @Autowired
    private MyWebSocketHandler myWebSocketHandler;

    @Override
    public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
         registry.addHandler(myWebSocketHandler, "/socketHandler").setAllowedOrigins("*").withSockJS();

    }
}
java spring spring-boot websocket rabbitmq
1个回答
0
投票

有人可以告诉我服务器端实现是否正在使用stompWebSocket,是否也希望客户端实现stomp?

您可以在Web套接字配置中注册多个处理程序。因此,从理论上讲,您可以为STOMP提供一个处理程序,为普通Web套接字提供一个处理程序。如果仅提供STOMP处理程序,则来自标准Web套接字客户端的握手将失败。

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

是的。 STOMP还提供了一些更好的功能,尤其是对某些终结点的订阅。

我基本上是试图从表格中获取不同的数据集。客户请求并连续写入WebSocket。

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

© www.soinside.com 2019 - 2024. All rights reserved.