雷达智富

首页 > 内容 > 程序笔记 > 正文

程序笔记

java的服务端websocket怎么写

2024-07-23 30

在Java中实现WebSocket服务端,通常可以使用Java API for WebSocket(JSR 356)提供的标准库。以下是一个简单的Java WebSocket服务端的示例代码,使用了Java的javax.websocket库:

import java.io.IOException;

import java.util.Collections;

import java.util.HashSet;

import java.util.Set;


import javax.websocket.OnClose;

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 Set<Session> clients = Collections.synchronizedSet(new HashSet<>());


    @OnOpen

    public void onOpen(Session session) {

        // 新的连接建立时调用

        clients.add(session);

        System.out.println("WebSocket连接建立,Session ID:" + session.getId());

    }


    @OnMessage

    public void onMessage(String message, Session session) {

        // 接收客户端消息时调用

        System.out.println("收到来自 " + session.getId() + " 的消息: " + message);


        // 向所有连接的客户端广播消息

        broadcast(message);

    }


    @OnClose

    public void onClose(Session session) {

        // 连接关闭时调用

        clients.remove(session);

        System.out.println("WebSocket连接关闭,Session ID:" + session.getId());

    }


    private void broadcast(String message) {

        // 向所有连接的客户端广播消息

        for (Session session : clients) {

            try {

                session.getBasicRemote().sendText(message);

            } catch (IOException e) {

                e.printStackTrace();

            }

        }

    }

}

在这个例子中:

@ServerEndpoint("/websocket") 注解用于标记WebSocket的端点(Endpoint),客户端将通过此端点连接到WebSocket服务器。

@OnOpen@OnMessage@OnClose 注解分别用于标记处理连接建立、接收消息和连接关闭的方法。

请注意,以上示例是一个简单的WebSocket服务器。在实际应用中,您可能需要更复杂的逻辑来处理连接管理、消息处理等。

要运行此WebSocket服务器,您需要一个支持WebSocket的Servlet容器,如Tomcat。将上述代码编译并打包成war文件,然后部署到Tomcat或其他支持WebSocket的容器中。

此外,请确保您的项目中包含了Java WebSocket API的库,如果使用Maven,可以在pom.xml中添加以下依赖:

<dependency>

    <groupId>javax.websocket</groupId>

    <artifactId>javax.websocket-api</artifactId>

    <version>1.1</version>

</dependency>

上述示例中使用了同步集合 Collections.synchronizedSet 来存储连接的会话,以确保线程安全。在实际应用中,您可能需要更复杂的会话管理机制,具体取决于您的需求。

更新于:1个月前
赞一波!

文章评论

全部评论