有人能告诉我,如果服务器端实现使用stomp WebSocket,客户端也需要实现stomp吗?
我正在尝试实现一个spring引导应用程序,我很困惑是否应该使用stomp实现。从我的研究中,我了解到,如果您想要扩展应用程序,最好使用stomp和embedded broker( RabbitMQ表示例如.)因为它将处理会话、心跳等,而不是内存中的代理。
在线可用的示例只显示带有和不带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 {
}
}WebSecurityConfig:
@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {
@Autowired
private MyWebSocketHandler myWebSocketHandler;
@Override
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
registry.addHandler(myWebSocketHandler, "/socketHandler").setAllowedOrigins("*").withSockJS();
}
}发布于 2020-03-05 08:02:02
有人能告诉我,如果服务器端实现使用stomp WebSocket,客户端也需要实现stomp吗?
您可以在web套接字配置中注册多个处理程序。因此,理论上您可以为STOMP提供一个处理程序,为普通的web套接字提供另一个处理程序。如果您只提供一个STOMP处理程序,那么来自标准web套接字客户端的握手将失败。
根据我的研究,我了解到,如果您想要扩展应用程序,最好使用stomp和embedded broker( RabbitMQ for例如.)因为它将处理会话、心跳等,而不是内存中的代理。
是这样的。STOMP还提供了一些更好的功能,特别是对某些端点的订阅。
--我基本上是在尝试根据客户端请求从表中获取不同的数据集,并不断地写入WebSocket。
很简单的描述..。您应该考虑是否需要跨多个实例共享会话,或者是否需要在web套接字会话之间发送消息。根据您的描述,听起来您只是接受一个web套接字连接,并不断地将数据推送到客户端。如果您想扩展这个应用程序,您可以将一个负载均衡器放在您的实例前面,这样就可以了。
https://stackoverflow.com/questions/60539909
复制相似问题