【发布时间】:2017-01-20 06:09:28
【问题描述】:
我已经使用 spring 实现了以下 Web-Socket-Server。我们不想使用 STOMP 和 JSocks。
@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
registry.addHandler(new WebSocketServerHandler(), "/websocket/user/{userId}");
}
}
@Service
public class WebSocketServerHandler extends TextWebSocketHandler {
private List<WebSocketSession> sessions = new ArrayList<WebSocketSession>();
@Override
public void handleTextMessage(WebSocketSession session, TextMessage message)
throws Exception {
session.sendMessage(message);
}
@Override
public void afterConnectionEstablished(WebSocketSession session) throws Exception {
sessions.add(session);
}
@Override
public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception {
sessions = null;
}
}
现在我可以从前端客户端(浏览器)成功连接到该 Web-Socket-Server。现在我想在运行时从我的一些 java 类连接到那个 Web-Socket-Server,然后想向那个 Web-Socket-Server 发送消息。有人知道我该怎么做吗?
我添加了一个测试 Rest Controller,如下所示:
@RequestMapping(value = "/web-socket/message/{message}")
public void sendMessage(@PathVariable("message") final String message) throws Exception {
final String WS_URI = "ws://localhost:8080/web-socket/user/23";
final CountDownLatch latch = new CountDownLatch(1);
WebSocketClientHandler handler = new WebSocketClientHandler(latch);
WebSocketClient client = new StandardWebSocketClient();
WebSocketSession session = client.doHandshake(handler, WS_URI).get();
session.sendMessage(new TextMessage(message));
latch.await(5, TimeUnit.SECONDS);
session.close();
}
我能够成功地向 websocket 服务器发送消息,仅是第一次通过使用 google rest 客户端调用此 Test RestController。如果我需要再次发送消息,那么我必须重新启动 tomcat 服务器。我在这里做什么有什么问题吗?
【问题讨论】:
标签: java spring-websocket java-websocket