当前位置: 首页 > 知识库问答 >
问题:

基于Java的websocket客户端用于基于Spring的websocket服务器

沈畅
2023-03-14

我使用Spring Boot开发了这个websocket服务器。服务器与基于js的客户机配合得很好。

@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer {

    @Override
    public void configureMessageBroker(final MessageBrokerRegistry config) {
        config.enableSimpleBroker("/topic");
        config.setApplicationDestinationPrefixes("/app");
    }

    @Override
    public void registerStompEndpoints(final StompEndpointRegistry registry) {
        registry.addEndpoint("/chat").withSockJS();
        registry.addEndpoint("/chat");
    }

}

控制器:

@Controller
public class ChatController {

    @MessageMapping("/chat")
    @SendTo("/topic/messages")
    public OutputMessage send(final Message message) throws Exception {

        final String time = new SimpleDateFormat("HH:mm").format(new Date());
        return new OutputMessage(message.getFrom(), message.getText(), time);
    }

}

这是服务器端。现在,对于客户机,我已经创建了一个@ClientEndpoint,当我连接到URI“ws://localhost:8080/spring-mvc-java/chat”时,我能够建立一个连接,并且可以看到@ClientEndpoint的@OnOpen回调被触发。

但是,userSession.getAsyncRemote().sendText(message)似乎没有任何作用。我没有看到服务器的响应。

我可以看到js客户端是:

  1. 连接到服务器var socket=new SockJS(“/spring-mvc-java/chat”)
  2. 正在订阅StompClient.Subscribe(“/topic/messages”,...
  3. 发送消息stompclient.send(“/app/chat”,...

我能做到第一步。如何在基于Java的客户端中实现第二步和第三步?

谢谢

共有1个答案

胥玮
2023-03-14

首先,您需要一个websocketclient和websocketstompclient

WebSocketClient client = new StandardWebSocketClient();
WebSocketStompClient stompClient = new WebSocketStompClient(client);
stompClient.setMessageConverter(new MappingJackson2MessageConverter());

您必须从stompsessionhandler自定义处理程序

getPayloadType
handleFrame
afterConnected
handleException
handleTransportError

方法

StompSessionHandler sessionHandler = new CustomStompSessionHandler();

你可以这样连接你的插座。您可以完成发送和接收消息

StompSession stompSession=stompClient.connect("ws://localhost:8080/chat",sessionHandler).get();

这两个触发您的websocket主题/messages通过套接字为您提供消息

/app/chat向套接字发送消息

stompSession.subscribe("/topic/messages", sessionHandler);
stompSession.send("/app/chat", new Message("Hi", "user"));

你想要这样吗?

 类似资料:
  • 我有一个连接到WebSocket服务器并从服务器接收消息的微服务。我想在这个应用程序中集成Sleuth,因为这是我的一组微服务的网关。但是当我连接到WebSocket服务器并开始接收消息时,我无法在日志中跟踪ID,spanid。我期待着这样的事情: 但我得到了: 我的代码如下: 我们的pom条目包括:

  • 问题内容: 我正在尝试在Java中的服务器和JavaScript客户端之间建立连接,但在客户端出现此错误: WebSocket与“ ws://127.0.0.1:4444 /”的连接失败:在收到握手响应之前,连接已关闭 由于可能从未调用该函数,因此它可能保持在OPENNING状态。该不会被调用。 有人可以让我知道这里出了什么问题吗? 服务器 服务器线程 游戏协议 客户 问题答案: 首先,您的两个代

  • 本文向大家介绍node.js基于express使用websocket的方法,包括了node.js基于express使用websocket的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了node.js基于express使用websocket的方法。分享给大家供大家参考,具体如下: 这个效果我也是翻了好长时间的资料,测试才成功的,反正成功,大家看看吧 首先你需要安装socket.io模块

  • 我的情况是,我们目前正在编写一个使用Node的在线应用程序。服务器端的js和WebSocket侦听器。我们有两个不同的部分:一个是服务页面,另一个是使用节点。js和express ejs,另一个是完全不同的应用程序,只包含套接字。用于WebSocket的io库。现在我们来讨论WebSocket部分的可伸缩性问题。 我们发现的一个解决方案是使用redis并在服务器之间共享套接字信息,但由于体系结构的

  • 我正在使用spring boot(2.2.2)和Grpc server spring boot starter java库开发一个基于java的Grpc服务器。我的客户端应用程序是一个C#应用程序(netcoreapp3.1)。这两个应用程序都在我的笔记本电脑上运行。 这是我的原始文件 这是服务代码 我首先用这个工具测试了服务器 该服务与此客户端工具配合使用效果良好。 然而,当我使用C#客户端测试