谁能告诉我服务器端实现是否正在使用stomp WebSocket,客户端是否也应该实现stomp?
我正在尝试实现Spring Boot应用程序,无论是否采用stomp实现,我都很困惑。从我的研究中,我了解到,如果您想扩展应用程序,最好使用重载和嵌入式代理(例如RabbitMQ),因为它将处理会话,心跳等,而不是内存中的代理。
在线提供的示例仅显示带有或不带有踩踏的实现。
我基本上是应客户端请求从表中获取不同的数据集,并连续写入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();
}
}
有人可以告诉我服务器端实现是否正在使用stompWebSocket,是否也希望客户端实现stomp?
您可以在Web套接字配置中注册多个处理程序。因此,从理论上讲,您可以为STOMP提供一个处理程序,为普通Web套接字提供一个处理程序。如果仅提供STOMP处理程序,则来自标准Web套接字客户端的握手将失败。
根据我的研究,我了解到,如果您想扩展应用程序,最好使用stomp和嵌入式代理(例如RabbitMQ)将处理会话,心跳等,而不是内存经纪人。
是的。 STOMP还提供了一些更好的功能,尤其是对某些终结点的订阅。
我基本上是试图从表格中获取不同的数据集。客户请求并连续写入WebSocket。
这是一个非常简单的描述...您应该考虑是否需要在多个实例之间共享会话,或者是否需要在Web套接字会话之间发送消息。根据您的描述,听起来您只是接受Web套接字连接并将数据连续推送到客户端。如果您想扩展此应用程序,则只需在实例前面放置一个负载平衡器,就可以了。