【问题标题】:SockJS Java Client Implementation for non-web application用于非 Web 应用程序的 SockJS Java 客户端实现
【发布时间】:2017-06-11 17:34:24
【问题描述】:

如何使用 Spring Boot 在 java swing 应用程序中实现SockJS 客户端。如果有很好的例子请提及。

【问题讨论】:

    标签: java swing spring-boot websocket sockjs


    【解决方案1】:

    首先,请查阅官方文档:https://docs.spring.io/spring/docs/current/spring-framework-reference/html/websocket.html

    非 Web 应用程序仍需要应用程序服务器,在您的情况下,其中一个嵌入式解决方案绝对足够了。如果您使用的是 maven,请尝试以下示例:

    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>4.3.5.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-websocket</artifactId>
            <version>4.3.5.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.mockito</groupId>
            <artifactId>mockito-all</artifactId>
            <version>1.10.19</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-messaging</artifactId>
            <version>4.3.5.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.eclipse.jetty</groupId>
            <artifactId>jetty-client</artifactId>
            <version>9.4.0.v20161208</version>
        </dependency>
        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-websocket</artifactId>
            <version>8.5.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-logging-log4j</artifactId>
            <version>8.5.2</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.5.3</version>
            <scope>runtime</scope>
        </dependency>
    </dependencies>
    

    您的客户或多或少看起来像这样:

    List<Transport> transports = new ArrayList<Transport>(2);
        transports.add(new WebSocketTransport(new StandardWebSocketClient()));
        transports.add(new RestTemplateXhrTransport());
        SockJsClient sockJsClient = new SockJsClient(transports);
        WebSocketStompClient stompClient = new WebSocketStompClient(sockJsClient);
        stompClient.setMessageConverter(new StringMessageConverter());
        StompSession session = null;
        DefaultStompFrameHandler stompHandler = new DefaultStompFrameHandler();
        try {
            session = stompClient.connect(WEBSOCKET_URI, new MyStompSessionHandler()).get(1, TimeUnit.SECONDS);
            session.subscribe("/topic" + "/channel", stompHandler);
            // do your stuff
            ...         
        } finally {
            if (session != null) {
                session.disconnect();
            }
        }
    

    您的主 Spring Boot 类可以像这样启动 Swing Frame:

    @SpringBootApplication
    public class Application {
    
    public static void main(String[] args) {
        ConfigurableApplicationContext context = new  SpringApplicationBuilder(Application.class).headless(false).run(args);
    
        EventQueue.invokeLater(() -> {
            // this is your JFrame
            AppPrincipalFrame appFrame = context.getBean(AppPrincipalFrame.class);
            appFrame.setVisible(true);
        });
    

    希望这会有所帮助 :) 祝你好运!

    【讨论】:

    • 谢谢老兄,你能不能提一下完整的依赖关系。
    • 一些类不在tomcat依赖中
    • Transport , WebSocketTransport, StandardWebSocketClient, RestTemplateXhrTransport, SockJsClient, WebSocketStompClient, StringMessageConverter, StompSession, DefaultStompFrameHandler 不在跨度>
    • 在我的回答中查找依赖项列表 :)
    • 2017-01-26 16:23:24.060 ERROR 4184 --- [lient-AsyncIO-1] o.s.w.s.s.c.WebSocketClientSockJsSession : Ignoring received message due to state=CLOSED in WebSocketClientSockJsSession[id='8e6606cb4e6e41f6ae635c694d71b362, url=ws://192.168.1.20:8080/ws]你能给出原因吗?服务器工作正常
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-26
    • 2017-01-18
    • 2021-09-02
    • 2010-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多