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>
相关推荐
wanhengidc20 分钟前
高性价比云手机挑选指南
运维·网络·安全·游戏·智能手机
dreams_dream1 小时前
标准 HTTP 状态码详解
网络·网络协议·http
m0_720245012 小时前
网络编程(6)
网络
塔中妖3 小时前
【华为OD】5G网络建设
网络·5g·华为od
网络之路Blog6 小时前
【实战中提升自己完结篇】分支篇之分支之无线、内网安全与QOS部署(完结)
网络协议·安全·网络之路一天·华为华三数通基础·网络设备管理·华为华三二三层交换机对接
小魏的马仔6 小时前
【企业微信】接口报错:javax.net.ssl.SSLHandshakeException
网络协议·企业微信·ssl
eqwaak07 小时前
科技信息差(9.10)
网络·人工智能·分布式·ar·智能硬件
wanhengidc7 小时前
云手机可以用来托管游戏吗?
运维·网络·安全·游戏·智能手机
roshy9 小时前
RPC 与http对比
网络协议·http·rpc
tianyuanwo10 小时前
Rust语言组件RPM包编译原理与Cargo工具详解
开发语言·网络·rust·rpm