当前位置:首页 > Java > 正文

Java实现WebSocket实时通信(从零开始的WebSocket入门教程)

在现代Web开发中,实时通信已成为不可或缺的功能。无论是聊天应用、股票行情推送还是在线协作工具,都需要服务器主动向客户端推送数据。传统的HTTP请求-响应模式无法满足这种需求,而WebSocket协议正是为此而生。

本篇Java WebSocket教程将带你从零开始,使用Java语言搭建一个简单的WebSocket服务端,并通过前端页面进行测试。即使你是编程小白,也能轻松上手!

什么是WebSocket?

WebSocket是一种在单个TCP连接上进行全双工通信的协议。它允许客户端和服务器之间进行双向数据传输,且连接建立后无需反复握手,大大降低了通信开销。

Java实现WebSocket实时通信(从零开始的WebSocket入门教程) Java WebSocket  教程 实时通信 入门 第1张

准备工作

要使用Java开发WebSocket应用,我们推荐使用Java EE(现 Jakarta EE)中的标准API —— javax.websocket。如果你使用的是Spring Boot框架,也可以使用Spring对WebSocket的封装,但本教程将基于原生Java WebSocket API,便于理解底层原理。

你需要准备:

  • Java 8 或更高版本
  • Maven 或 Gradle 构建工具(可选,但推荐)
  • 支持WebSocket的Web容器(如Tomcat 7+、Jetty 9+)

第一步:创建WebSocket服务端

首先,我们创建一个Java类,并使用注解将其标记为WebSocket端点。

import javax.websocket.OnClose;import javax.websocket.OnMessage;import javax.websocket.OnOpen;import javax.websocket.Session;import javax.websocket.server.ServerEndpoint;import java.io.IOException;import java.util.concurrent.CopyOnWriteArraySet;@ServerEndpoint("/websocket")public class MyWebSocketServer {    // 用于存储所有连接的会话    private static CopyOnWriteArraySet<Session> sessions = new CopyOnWriteArraySet<>();    @OnOpen    public void onOpen(Session session) {        sessions.add(session);        System.out.println("有新连接加入!当前在线人数为:" + sessions.size());    }    @OnMessage    public void onMessage(String message, Session session) {        System.out.println("收到消息:" + message);        // 广播消息给所有客户端        for (Session s : sessions) {            try {                s.getBasicRemote().sendText("服务器收到消息:" + message);            } catch (IOException e) {                e.printStackTrace();            }        }    }    @OnClose    public void onClose(Session session) {        sessions.remove(session);        System.out.println("有一连接关闭!当前在线人数为:" + sessions.size());    }}

代码说明:

  • @ServerEndpoint("/websocket"):定义WebSocket的访问路径为 /websocket
  • @OnOpen:当客户端连接时触发。
  • @OnMessage:当收到客户端消息时触发。
  • @OnClose:当连接关闭时触发。
  • 使用 CopyOnWriteArraySet 线程安全地保存所有会话。

第二步:部署到Web容器

如果你使用Maven,确保在 pom.xml 中添加WebSocket依赖(以Tomcat为例):

<dependency>    <groupId>javax.websocket</groupId>    <artifactId>javax.websocket-api</artifactId>    <version>1.1</version>    <scope>provided</scope></dependency>

然后将项目打包成WAR文件,部署到Tomcat等支持WebSocket的服务器中。

第三步:编写前端测试页面

创建一个简单的HTML页面来测试我们的WebSocket服务:

<!DOCTYPE html><html lang="zh-CN"><head>    <meta charset="UTF-8">    <title>WebSocket测试</title></head><body>    <h2>Java WebSocket 实时通信测试</h2>    <input type="text" id="message" placeholder="输入消息" />    <button onclick="sendMessage()">发送</button>    <div id="output" style="margin-top: 20px; padding: 10px; border: 1px solid #ccc;"></div>    <script>        const ws = new WebSocket('ws://localhost:8080/your-app/websocket');        ws.onopen = function(event) {            document.getElementById('output').innerHTML += '<p>✅ 连接已建立</p>';        };        ws.onmessage = function(event) {            document.getElementById('output').innerHTML += '<p>📥 收到:' + event.data + '</p>';        };        ws.onclose = function(event) {            document.getElementById('output').innerHTML += '<p>❌ 连接已关闭</p>';        };        function sendMessage() {            const msg = document.getElementById('message').value;            ws.send(msg);            document.getElementById('message').value = '';        }    </script></body></html>

注意:请将 ws://localhost:8080/your-app/websocket 中的 your-app 替换为你的实际项目名。

总结

通过本篇Java WebSocket教程,你已经学会了如何使用Java实现一个简单的WebSocket服务端,并通过前端页面进行实时通信测试。这项技术是构建Java实时通信应用的基础。

记住,WebSocket入门的关键在于理解其生命周期方法(onOpen、onMessage、onClose)以及如何管理多个客户端连接。随着你对Java WebSocket的深入掌握,你可以进一步实现用户认证、私聊、房间分组等高级功能。

现在,打开你的IDE,动手试试吧!实时通信的世界,从这一行代码开始。