提问者:小点点

Spingboot Websocket跺脚


谁能告诉我,如果服务器端实现使用的是跺脚WebSocket,客户端是否也应该实现跺脚?

我正在尝试实现一个Spring引导应用程序,我很困惑我是否应该使用或不使用跺脚实现。从我的研究来看,我明白,如果你想扩展应用程序,最好使用跺脚和嵌入式代理(例如RabbitMQ),因为它将处理会话、心跳等,而不是内存代理。

在线可用的示例仅显示了有和没有跺脚的实现。

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

  1. 有人能证实我目前的理解是否正确吗?
  2. 如果我选择了践踏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 {

    }
}

WebSecurityConfig:

@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {

    @Autowired
    private MyWebSocketHandler myWebSocketHandler;

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

    }
}

共1个答案

匿名用户

谁能告诉我,如果服务器端实现使用的是跺脚WebSocket,客户端是否也应该实现跺脚?

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

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

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

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

这是一个非常简单的描述…你应该考虑你是否需要在多个实例之间共享会话,或者你是否需要在网络套接字会话之间发送消息。从你的描述来看,听起来你只是接受一个网络套接字连接,并不断向客户端推送数据。如果你想扩展这个应用程序,你可以在你的实例前面放一个负载均衡器,你就可以开始了。