java 使用websocket 跟前端交互,后台更新数据时,主动推送完整项目案例
时间: 2023-10-11 11:10:38 浏览: 134
nettyio-demo.rar
这里提供一个简单的 Java 使用 WebSocket 实现实时推送数据到前端的项目案例,供参考:
1. 创建一个 Maven 项目,添加以下依赖:
```xml
<!-- WebSocket 相关依赖 -->
<dependency>
<groupId>javax.websocket</groupId>
<artifactId>javax.websocket-api</artifactId>
<version>1.1</version>
</dependency>
<dependency>
<groupId>org.glassfish.tyrus</groupId>
<artifactId>tyrus-server</artifactId>
<version>1.13.1</version>
</dependency>
<dependency>
<groupId>org.glassfish.tyrus</groupId>
<artifactId>tyrus-container-grizzly</artifactId>
<version>1.13.1</version>
</dependency>
```
2. 创建一个 WebSocket 服务端,代码如下:
```java
import java.io.IOException;
import java.util.concurrent.CopyOnWriteArrayList;
import javax.websocket.OnClose;
import javax.websocket.OnError;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.ServerEndpoint;
@ServerEndpoint("/websocket")
public class WebSocketServer {
// 用于存储所有连接的 WebSocket 对象
private static CopyOnWriteArrayList<WebSocketServer> webSocketList = new CopyOnWriteArrayList<>();
// 与某个客户端的连接会话,需要通过它来给客户端发送消息
private Session session;
/**
* 连接建立成功调用的方法
*/
@OnOpen
public void onOpen(Session session) {
this.session = session;
webSocketList.add(this);
System.out.println("有新连接加入,当前在线人数为:" + webSocketList.size());
}
/**
* 连接关闭调用的方法
*/
@OnClose
public void onClose() {
webSocketList.remove(this);
System.out.println("有一连接关闭,当前在线人数为:" + webSocketList.size());
}
/**
* 收到客户端消息后调用的方法
*/
@OnMessage
public void onMessage(String message, Session session) {
System.out.println("收到来自客户端的消息:" + message);
}
/**
* 发生错误时调用
*/
@OnError
public void onError(Session session, Throwable error) {
System.out.println("发生错误:" + error.getMessage());
}
/**
* 向所有连接的客户端发送消息
* @param message
* @throws IOException
*/
public static void sendMessage(String message) throws IOException {
for (WebSocketServer webSocket : webSocketList) {
webSocket.session.getBasicRemote().sendText(message);
}
}
}
```
3. 创建一个定时任务,在后台定时更新数据,并调用 WebSocketServer.sendMessage 方法向前端推送数据,代码如下:
```java
import java.io.IOException;
import java.util.Timer;
import java.util.TimerTask;
public class MyTimerTask extends TimerTask {
public void run() {
try {
// 向前端推送数据
WebSocketServer.sendMessage("当前时间:" + new Date());
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
// 启动定时任务,每隔 5 秒执行一次
Timer timer = new Timer();
timer.schedule(new MyTimerTask(), 0, 5000);
}
}
```
4. 在前端页面中,创建 WebSocket 对象,并在代码中实现 onOpen、onClose、onMessage 等方法,监听 WebSocket 的连接、断开连接和消息,代码如下:
```javascript
var websocket = null;
if ('WebSocket' in window) {
websocket = new WebSocket('ws://localhost:8080/websocket');
// 连接成功时触发
websocket.onopen = function(event) {
console.log('WebSocket连接成功');
}
// 接收到消息时触发
websocket.onmessage = function(event) {
console.log('收到服务器推送的消息:' + event.data);
}
// 连接关闭时触发
websocket.onclose = function(event) {
console.log('WebSocket连接关闭');
}
// 发生错误时触发
websocket.onerror = function(event) {
console.log('WebSocket连接发生错误');
}
} else {
alert('该浏览器不支持WebSocket');
}
```
以上就是一个简单的 Java 使用 WebSocket 实现实时推送数据到前端的项目案例,可以根据需求进行修改和扩展。
阅读全文