Java中websocket的作用和使用代码示例
时间: 2024-05-03 21:22:19 浏览: 157
Websocket是HTML5中的一种协议,用于在客户端和服务器之间建立双向通信的连接,可以实现实时数据传输和互动。在Java中,可使用Java WebSocket API(JSR 356)实现Websocket功能。
以下是使用Java WebSocket API实现Websocket的代码示例:
1. 创建一个继承自javax.websocket.Endpoint的类,实现onOpen、onMessage、onClose和onError方法,用于处理Websocket连接的打开、消息接收、关闭和错误处理。
```
import java.io.IOException;
import javax.websocket.Endpoint;
import javax.websocket.EndpointConfig;
import javax.websocket.MessageHandler;
import javax.websocket.Session;
import javax.websocket.CloseReason;
public class MyEndpoint extends Endpoint {
@Override
public void onOpen(Session session, EndpointConfig config) {
// 当Websocket连接打开时,执行此方法
System.out.println("Websocket connected: " + session.getId());
// 注册消息处理器
session.addMessageHandler(new MessageHandler.Whole<String>() {
@Override
public void onMessage(String message) {
// 接收到消息时,执行此方法
System.out.println("Received message: " + message);
// 发送消息给客户端
try {
session.getBasicRemote().sendText("Hello, " + message);
} catch (IOException e) {
e.printStackTrace();
}
}
});
}
@Override
public void onClose(Session session, CloseReason reason) {
// 当Websocket连接关闭时,执行此方法
System.out.println("Websocket closed: " + session.getId());
}
@Override
public void onError(Session session, Throwable throwable) {
// 当Websocket连接出现错误时,执行此方法
throwable.printStackTrace();
}
}
```
2. 在Web应用程序中,使用javax.websocket.server.ServerEndpoint注解指定一个URI,将其绑定到MyEndpoint类上。例如:
```
import javax.websocket.server.ServerEndpoint;
@ServerEndpoint("/myendpoint")
public class MyEndpoint {
// ...
}
```
3. 在Web应用程序中,使用javax.websocket.server.ServerContainer类来注册MyEndpoint类。例如:
```
import javax.websocket.server.ServerContainer;
import javax.websocket.server.ServerEndpointConfig;
@javax.servlet.annotation.WebServlet(name = "MyWebsocketServlet", urlPatterns = {"/mywebsocket"})
public class MyWebsocketServlet extends javax.servlet.http.HttpServlet {
@Override
public void init() {
// 获取ServerContainer对象
ServerContainer container = (ServerContainer)getServletContext().getAttribute("javax.websocket.server.ServerContainer");
// 创建EndpointConfig对象
ServerEndpointConfig endpointConfig = ServerEndpointConfig.Builder.create(MyEndpoint.class, "/myendpoint").build();
// 注册Endpoint
try {
container.addEndpoint(endpointConfig);
System.out.println("Websocket endpoint registered");
} catch (Exception e) {
e.printStackTrace();
}
}
}
```
4. 在客户端中,使用WebSocket对象来连接MyEndpoint类。例如:
```
var ws = new WebSocket("ws://localhost:8080/mywebsocket/myendpoint");
ws.onopen = function() {
console.log("Websocket connected");
ws.send("World");
};
ws.onmessage = function(event) {
console.log("Received message: " + event.data);
};
ws.onclose = function(event) {
console.log("Websocket closed: " + event.code);
};
```
这样,就可以在客户端和服务器之间建立双向通信的Websocket连接,并实现数据传输和互动。
阅读全文