java多线程WebSocket
背景
我已经使用RPC协议实现了一个适配器接口,但最近我的任务是使用WebSocket侦听器实现该接口。有了RPC,我可以很容易地启动一个RPC侦听器线程来侦听另一个线程上的事件,但对于JSR356,我发现它并不是那么简单
问题是
我试图实现一个连接到订阅URI的JavaWebSocket客户端端点,但我想以一种利用多线程的方式来实现。我一直很难从客户端端点的角度找到需要多线程的例子。这可能吗
我需要WebSocket消息处理程序在不阻塞主线程的情况下处理消息。我还没有实现消息处理程序,因为我不知道如何创建它来实现我想要的。有人能帮我指出一个更好的方向吗?以下是我目前掌握的情况:
事件处理程序。爪哇
@ClientEndpoint
public class EventHandler {
private URI subscriptionURI;
private Session clientSession;
public EventHandler(URI subscriptionURI) throws URISyntaxException {
this.subscriptionURI = subscriptionURI;
}
/**
* Attempts to connect to the CADI WebSocket server.
* @throws Exception
*/
public void connect() throws Exception {
// Grab the WebSocket container and attempt to connect to the subscription URI
WebSocketContainer container = ContainerProvider.getWebSocketContainer();
container.connectToServer(this, subscriptionURI);
}
/**
* Closes the CADI WebSocket client session.
*/
public void close() {
try {
// Close the client session if it is open
if(clientSession != null && clientSession.isOpen())
clientSession.close();
}
catch(Exception e) {
LogMaster.getErrorLogger().error("Could not close the WebSocket client session. It may have been closed already.", e);
}
}
@OnOpen
public void socketOpened(Session session) {
this.clientSession = session;
}
}
下面是我如何启动一个新线程来连接WebSocket。然而,这意味着什么?WebSocket上接收到的后续消息是否仍将阻止主线程
EventHandler eventHandler = new EventHandler(new URI("wss://localhost/Example"));
new Thread()
{
@Override
public void run() {
try {
eventHandler.connect();
}
catch (Exception e) {
LogMaster.getErrorLogger().error("Could not start EventHandler.", e);
}
}
}.start();
共 (0) 个答案