WebSocket Endpoint端点

WebSocket端点(WebSocket Endpoint)是指在WebSocket协议中,服务器和客户端之间的通信通道的终端。在Java中,通常使用 @ServerEndpoint 注解来标识一个类作为WebSocket端点。这个类负责处理客户端的连接、接收消息、发送消息以及处理连接关闭等事件。

@ServerEndpoint 注解

@ServerEndpoint 是Java WebSocket API(JSR 356)提供的注解,用于标记一个类为WebSocket端点。这个注解可以指定端点的路径,以及其他配置信息。

常用注解和方法

@OnOpen:当一个新的WebSocket连接建立时调用。

@OnMessage:当从客户端接收到消息时调用。

@OnClose:当WebSocket连接关闭时调用。

@OnError:当WebSocket连接发生错误时调用。

示例代码

后端
java 复制代码
import javax.websocket.OnClose;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.ServerEndpoint;

//指定WebSocket端点的路径为 /chat。客户端可以通过 ws://yourserver/chat 连接到这个端点。
@ServerEndpoint("/chat")
public class ChatEndpoint {

    @OnOpen
    public void onOpen(Session session) {
        System.out.println("Connection opened: " + session.getId());
    }

    @OnMessage
    public void onMessage(String message, Session session) {
        System.out.println("Message received: " + message);
        try {
            // 回应客户端
            session.getBasicRemote().sendText("Echo: " + message);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @OnClose
    public void onClose(Session session) {
        System.out.println("Connection closed: " + session.getId());
    }

    @OnError
    public void onError(Session session, Throwable throwable) {
        System.out.println("Error occurred in session " + session.getId());
        throwable.printStackTrace();
    }
}
前端
html 复制代码
    <input type="text" id="messageInput" />
    <button onclick="sendMessage()">Send</button>

    <script>
        var socket = new WebSocket('ws://localhost:8080/chat');

        socket.onopen = function() {
            console.log('Connected to server');
        };

        socket.onmessage = function(event) {
            var messagesDiv = document.getElementById('messages');
            var messageElement = document.createElement('div');
            messageElement.textContent = event.data;
            messagesDiv.appendChild(messageElement);
        };

        socket.onclose = function() {
            console.log('Disconnected from server');
        };

        function sendMessage() {
            var input = document.getElementById('messageInput');
            socket.send(input.value);
            input.value = '';
        }
    </script>
相关推荐
qq_三哥啊18 分钟前
【mitmproxy】提取 OpenCode 的 API 接口
网络·代理模式
dog25025 分钟前
圆锥曲线和二次曲线
开发语言·网络·人工智能·算法·php
盟接之桥1 小时前
什么是EDI(电子数据交换)|制造业场景解决方案
大数据·网络·安全·汽车·制造
qq_三哥啊2 小时前
【mitmproxy】通过 mitmproxy 的本地捕获代理模式获取 OpenCode 发起的 AI API 请求的详细信息
网络·系统安全·代理模式
IT摆渡者2 小时前
linux 系统安全检查
运维·网络·经验分享·笔记
学习3人组2 小时前
OEE(设备综合效率)的标准定义、公式、损失分类、以及在工位触屏/MES里怎么采集和统计
大数据·网络·数据库
时空自由民.3 小时前
蓝牙协议栈介绍
linux·网络·单片机
ggabb3 小时前
月壤之下:人类驻月先行者
网络
b55t4ck4 小时前
FortiWeb CVE-2025-64446漏洞深入复现分析
网络·安全·iot
wanhengidc4 小时前
可持续性 云手机运行
运维·服务器·网络·安全·智能手机