小智 8
您当然可以在浏览器沙箱之外使用Java中桌面应用程序的WebSockets.这背后的想法是您可以创建创建TCP连接的胖客户端,因此他们当然应该能够在这些TCP连接之上创建WebSocket连接.
这样做的最新和最好的API之一是由Kaazing编写的,它认为WebSocket就像一个套接字,可以使用简单的"ws://"URI创建.
在Kaazing Gateway 5.0 Java WebSocket文档站点上详细讨论了API .您可以在这里从Kaazing下载普通网关
创建一个websocket:
import com.kaazing.net.ws.WebSocket;
import com.kaazing.net.ws.WebSocketFactory;
wsFactory = WebSocketFactory.createWebSocketFactory();
ws = wsFactory.createWebSocket(URI.create("ws://example.com:8001/path"));
ws.connect(); // This will block or throw an exception if failed.
Run Code Online (Sandbox Code Playgroud)
要发送消息,请添加WebSocketMessageWriter对象:
WebSocketMessageWriter writer = ws.getMessageWriter();
String text = "Hello WebSocket!";
writer.writeText(text); // Send text message
Run Code Online (Sandbox Code Playgroud)
要接收或使用消息,请添加WebSocket和WebSocketMessageReader对象:
wsFactory = WebSocketFactory.createWebSocketFactory();
ws = wsFactory.createWebSocket(URI.create("ws://example.com:8001/path"));
ws.connect(); // This will block or throw an exception if failed.
WebSocketMessageReader reader = ws.getMessageReader();
WebSocketMessageType type = null; // Block till a message arrives
// Loop till the connection goes away
while ((type = reader.next()) != WebSocketMessageType.EOS) {
switch (type) { // Handle both text and binary messages
case TEXT:
CharSequence text = reader.getText();
log("RECEIVED TEXT MESSAGE: " + text.toString());
break;
case BINARY:
ByteBuffer buffer = reader.getBinary();
log("RECEIVED BINARY MESSAGE: " + getHexDump(buffer));
break;
}
}
Run Code Online (Sandbox Code Playgroud)
(完全披露:我曾在Kaazing Corporation担任服务器工程师.)
您还可以考虑使用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"));
Run Code Online (Sandbox Code Playgroud)
带注释的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
}
Run Code Online (Sandbox Code Playgroud)
请参阅链接页面了解更多详情(完整规格).
这里有各种实现,基本上每个Java容器都有一个.我正在开发Glassfish/WebLogic实现,它叫做Tyrus,可以随意尝试(我们提供易于使用的所有功能,请参见http://search.maven.org/...).
归档时间: |
|
查看次数: |
7435 次 |
最近记录: |