我正在从事一个需要用户之间进行实时交互的项目。我想要一个 HTML5 网络客户端(足够简单)和一个本地客户端(最好是 Java),两者都能够连接到服务器。我做了一些研究,但没有找到关于本地客户端是否可以在没有浏览器的情况下连接到服务器的决定性答案。
问题:有没有什么方法可以在不浏览的情况下从本地 Java 客户端连接到 websocket 服务器?我已经看到一些其他语言的浏览器包装器可能使这成为可能。如果没有,我愿意接受建议。
谢谢。
最佳答案
您也可以考虑使用 JSR 356 - Java API for WebSocket .它是 Java EE 7 的一部分,但客户端可以从普通 Java SE 运行而不会出现任何问题。现在有多种实现可用,以下将适用于所有这些实现:
程序化 API:
final WebSocketContainer webSocketContainer = ContainerProvider.getWebSocketContainer();
Session session = webSocketContainer.connectToServer(new Endpoint() {
@Override
public void onOpen(Session session, EndpointConfig config) {
// session.addMessageHandler( ... );
}
}, URI.create("ws://some.uri"));
带注释的 API:
public static void main(String[] args) throws IOException, DeploymentException {
final WebSocketContainer webSocketContainer = ContainerProvider.getWebSocketContainer();
webSocketContainer.connectToServer(MyEndpoint.class, URI.create("ws://some.uri"));
}
@ClientEndpoint
public static class MyEndpoint {
// text
@OnMessage
void onMessage(Session session, String message) {
// ...
}
// binary
@OnMessage
void onMessage(Session session, ByteBuffer message) {
// ...
}
// @OnClose, @OnOpen, @OnError
}
请参阅链接页面了解更多详情(完整规范)。
这里有多种实现,基本上每个 Java 容器都有一个。我正在研究 Glassfish/WebLogic 实现,它叫做 Tyrus ,请随时尝试(我们提供易于使用的 bundle ,请参阅 http://search.maven.org/...)。
关于没有浏览器的 Java Websocket 客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21194294/