Lex*_*Lex 0 javascript java spring stomp sockjs
目标是使用 Web 界面和 Spring 框架进行多房间聊天。看起来STOMP over SockJS是此类项目的最佳组合。STOMP 基于目的地的订阅解决了所有广播问题。但是,如果用户一次使用 100 个(例如)聊天,我需要在每次登录时从 Web 客户端发送 100 个订阅请求。
所以我正在寻找替代的单请求解决方案。让我来整理一下问题:
1) 有没有一种方法可以同时向多个订阅发出一个客户端 STOMP 请求?如果可以使用其他 JS 库发出这样的请求 - 那么我会很高兴尝试它。
2)有没有办法从Spring后端发起订阅?最好在服务器端为一个客户端注册多个目标消息查询 - 我可以为此使用特殊请求或在登录期间执行此操作。
3)关于这个问题还有其他建议吗?再说一遍:我很高兴尝试其他流行技术作为最后的手段。
下面的代码是最简单的 echo 服务。我只是测试这个协议和技术。
基本客户端代码:
window.onload = function () {
window.s = new SockJS("http://localhost:8080/portfolio");
window.s.onopen = function () {
window.stompClient = Stomp.over(window.s);
stompClient.connect('admin', 'admin', function(frame) {
console.log('Connected: ', frame);
stompClient.subscribe('/topic/echo', function(messageOutput) {
console.log(messageOutput.body);
})}, function(e){console.log("Fail My: ", e);})();
};
};
Run Code Online (Sandbox Code Playgroud)
踩踏配置:
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/portfolio").setAllowedOrigins("*").withSockJS()
.setClientLibraryUrl( "https://cdn.jsdelivr.net/npm/sockjs-client@1.3.0/dist/sockjs.min.js" );
}
@Override
public void configureMessageBroker(MessageBrokerRegistry registry) {
registry.enableSimpleBroker("/topic/");
registry.setApplicationDestinationPrefixes("/app");
}
}
Run Code Online (Sandbox Code Playgroud)
STOMP 控制器:
@Controller
public class GreetingController {
@MessageMapping("/greetings")
@SendTo("/topic/echo")
public String handleMessage(@Payload String greeting) {
System.out.println("[received]:" + greeting);
return "[echo]: " + greeting;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4940 次 |
| 最近记录: |