繁体   English   中英

Spingboot Websocket Stomp

[英]Spingboot Websocket Stomp

谁能告诉我服务器端实现是否使用 stomp WebSocket,客户端是否也希望实现 stomp?

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

在线提供的示例仅显示有和没有 stomp 的实现。

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

  1. 任何人都可以确认我到目前为止的理解是否正确?
  2. 如果我使用 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 {

    }
}

网络安全配置:

@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {

    @Autowired
    private MyWebSocketHandler myWebSocketHandler;

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

    }
}

谁能告诉我服务器端实现是否使用 stomp WebSocket,客户端是否也希望实现 stomp?

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

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

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

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

这是一个非常简单的描述......您应该考虑是否需要跨多个实例共享会话,或者是否需要在 Web 套接字会话之间发送消息。 从您的描述来看,您似乎只是接受 Web 套接字连接并不断向客户端推送数据。 如果您想扩展此应用程序,您只需在实例前放置一个负载均衡器即可。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM