java如何实现推送
Java 实现推送的方法
使用 WebSocket
WebSocket 是一种全双工通信协议,适用于实时推送场景。Java 提供了 javax.websocket 包支持 WebSocket 开发。
服务端代码示例:
@ServerEndpoint("/push")
public class PushEndpoint {
@OnOpen
public void onOpen(Session session) {
System.out.println("Client connected");
}
@OnMessage
public void onMessage(String message, Session session) {
try {
session.getBasicRemote().sendText("Echo: " + message);
} catch (IOException e) {
e.printStackTrace();
}
}
}
客户端 JavaScript 示例:
let socket = new WebSocket("ws://localhost:8080/push");
socket.onmessage = function(event) {
console.log("Received: " + event.data);
};
使用 Server-Sent Events (SSE)
SSE 是 HTML5 标准,允许服务器向客户端推送数据。
服务端实现:
@Path("/events")
public class SseResource {
@GET
@Produces(MediaType.SERVER_SENT_EVENTS)
public void getEvents(@Context SseEventSink eventSink) {
new Thread(() -> {
try {
for (int i = 0; i < 10; i++) {
eventSink.send(
SseEventSink.eventBuilder()
.data("Message " + i)
.build()
);
Thread.sleep(1000);
}
} catch (Exception e) {
e.printStackTrace();
}
}).start();
}
}
使用第三方推送服务
Firebase Cloud Messaging (FCM) 提供跨平台推送解决方案。
Java 集成示例:
// 初始化 FCM
FirebaseOptions options = new FirebaseOptions.Builder()
.setCredentials(GoogleCredentials.fromStream(new FileInputStream("service-account.json")))
.build();
FirebaseApp.initializeApp(options);
// 发送消息
Message message = Message.builder()
.setToken(deviceToken)
.setNotification(new Notification("Title", "Body"))
.build();
String response = FirebaseMessaging.getInstance().send(message);
使用消息队列
RabbitMQ 或 Kafka 等消息队列可实现高效的消息推送。
RabbitMQ 示例:
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("localhost");
try (Connection connection = factory.newConnection();
Channel channel = connection.createChannel()) {
channel.queueDeclare("push_queue", false, false, false, null);
channel.basicPublish("", "push_queue", null, "Push message".getBytes());
}
长轮询技术
当实时性要求不高时,可采用长轮询方式。
服务端实现:
@GetMapping("/poll")
public DeferredResult<String> pollUpdate() {
DeferredResult<String> deferredResult = new DeferredResult<>();
// 异步处理完成后调用
deferredResult.setResult("New data");
return deferredResult;
}
移动端推送方案
对于 Android 应用,可使用 Firebase 或华为推送服务。
华为推送集成:

// 初始化
HmsInstanceId.getInstance(context).getToken(appId, "HCM");
// 处理消息
public class MyPushService extends HmsMessageService {
@Override
public void onMessageReceived(RemoteMessage message) {
// 处理推送消息
}
}
选择推送方案时应考虑应用场景、实时性要求和系统资源等因素。WebSocket 适合高实时性场景,SSE 适合简单服务端推送,第三方服务适合跨平台需求,消息队列适合分布式系统。






