首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spingboot Websocket Stomp

Spingboot Websocket Stomp
EN

Stack Overflow用户
提问于 2020-03-05 07:09:00
回答 1查看 318关注 0票数 0

有人能告诉我,如果服务器端实现使用stomp WebSocket,客户端也需要实现stomp吗?

我正在尝试实现一个spring引导应用程序,我很困惑是否应该使用stomp实现。从我的研究中,我了解到,如果您想要扩展应用程序,最好使用stomp和embedded broker( RabbitMQ表示例如.)因为它将处理会话、心跳等,而不是内存中的代理。

在线可用的示例只显示带有和不带stomp的实现。

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

  1. 能确认一下我目前的理解是否正确吗?
  2. ,如果我使用stomp +websocket,我需要处理哪些重要的事情?

更新下面的使用程序:

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

更新代码- v1 MyWebSocketHandler:

代码语言:javascript
复制
@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:

代码语言:javascript
复制
@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {

    @Autowired
    private MyWebSocketHandler myWebSocketHandler;

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

    }
}
EN

回答 1

Stack Overflow用户

发布于 2020-03-05 08:02:02

有人能告诉我,如果服务器端实现使用stomp WebSocket,客户端也需要实现stomp吗?

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

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

是这样的。STOMP还提供了一些更好的功能,特别是对某些端点的订阅。

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60539909

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档