【发布时间】:2017-06-11 17:34:24
【问题描述】:
如何使用 Spring Boot 在 java swing 应用程序中实现SockJS 客户端。如果有很好的例子请提及。
【问题讨论】:
标签: java swing spring-boot websocket sockjs
如何使用 Spring Boot 在 java swing 应用程序中实现SockJS 客户端。如果有很好的例子请提及。
【问题讨论】:
标签: java swing spring-boot websocket sockjs
首先,请查阅官方文档: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);
});
希望这会有所帮助 :) 祝你好运!
【讨论】:
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]你能给出原因吗?服务器工作正常