java 实现 websocket
时间: 2023-10-11 18:12:01 浏览: 84
要在 Java 中实现 WebSocket,可以使用Java API for WebSocket。这个 API 是在 JavaEE 7 中引入的,它提供了一组用于实现 WebSocket 服务端和客户端的类和接口。
以下是一个简单的 WebSocket 服务端的示例代码:
```java
import java.io.IOException;
import javax.websocket.OnMessage;
import javax.websocket.Session;
import javax.websocket.server.ServerEndpoint;
@ServerEndpoint("/websocket")
public class WebSocketServer {
@OnMessage
public void onMessage(String message, Session session)
throws IOException {
session.getBasicRemote().sendText("Received: " + message);
}
}
```
在这个示例中,我们使用了 `@ServerEndpoint` 注解来标识 WebSocket 服务端的端点(endpoint),它指定了客户端连接 WebSocket 时要使用的 URL。在这个例子中,客户端将使用 `/websocket` URL 连接到 WebSocket 服务器。
`@OnMessage` 注解表示当 WebSocket 服务器收到客户端发送的消息时,会调用 `onMessage` 方法来处理消息。在这个例子中,我们简单地将收到的消息发送回客户端。
要启动这个 WebSocket 服务端,可以使用以下代码:
```java
import javax.websocket.server.ServerEndpointConfig;
import org.glassfish.tyrus.server.Server;
public class WebSocketServerApp {
public static void main(String[] args) {
Server server = new Server("localhost", 8080, "/websockets", null,
WebSocketServer.class);
try {
server.start();
System.out.println("WebSocket server started");
Thread.currentThread().join();
} catch (Exception e) {
e.printStackTrace();
} finally {
server.stop();
}
}
}
```
在这个示例中,我们使用了 Tyrus WebSocket 实现库来启动 WebSocket 服务器。我们指定了服务器监听的主机名和端口号,以及 WebSocket 服务器的上下文路径和 `WebSocketServer` 类作为 WebSocket 服务端的实现。最后,我们使用 `start` 方法启动 WebSocket 服务器。
启动 WebSocket 客户端也很简单,可以使用以下代码:
```java
import java.net.URI;
import javax.websocket.ClientEndpoint;
import javax.websocket.ContainerProvider;
import javax.websocket.OnMessage;
import javax.websocket.Session;
import javax.websocket.WebSocketContainer;
@ClientEndpoint
public class WebSocketClient {
@OnMessage
public void onMessage(String message) {
System.out.println("Received: " + message);
}
public static void main(String[] args) {
WebSocketContainer container = ContainerProvider
.getWebSocketContainer();
try {
Session session = container.connectToServer(WebSocketClient.class,
URI.create("ws://localhost:8080/websockets/websocket"));
session.getBasicRemote().sendText("Hello");
Thread.currentThread().join();
} catch (Exception e) {
e.printStackTrace();
}
}
}
```
在这个示例中,我们使用了 `@ClientEndpoint` 注解来标识 WebSocket 客户端的端点。当客户端收到消息时,`onMessage` 方法将被调用。
我们使用 `ContainerProvider.getWebSocketContainer()` 方法获取 WebSocket 容器,然后使用 `connectToServer` 方法连接到 WebSocket 服务器。在这个例子中,我们将 WebSocket URL 指定为 `ws://localhost:8080/websockets/websocket`,这是 WebSocket 服务器的 URL,以及 WebSocket 服务端的 URL 路径。
最后,我们使用 `session.getBasicRemote().sendText("Hello")` 方法向 WebSocket 服务器发送消息。
这就是一个简单的 Java WebSocket 实现示例。
阅读全文