美文网首页
websocket Java 客户端和服务端例子(一)

websocket Java 客户端和服务端例子(一)

作者: 樱花舞 | 来源:发表于2021-05-22 09:05 被阅读0次

    此篇文章使用的是tomcat包下的类来实现简单的Java websocket 服务端和客户端。

    1 引入包依赖

            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-websocket</artifactId>
            </dependency>
    

    码云地址

    2 创建服务端

    主要使用@ServerEndpoint、@OnOpen、@OnMessage、@OnClose、@OnError这几个注解,对应的方法里可以带下面的参数,当然也可以为空,具体需要由开发者定。

    注解 释义 参数
    @ServerEndpoint 注册端点
    @OnOpen 连接时调用 Session,EndpointConfig
    @OnMessage 收到消息调用 Session,String
    @OnClose 连接关闭时调用 Session,CloseReason
    @OnError 发生错误时调用 Session,Throwable

    2.1 端点发布

    使用ServerEndpointExporter发布由@ServerEndpoint定义的端点。

    @Configuration
    public class JxConfig {
        @Bean
        public ServerEndpointExporter serverEndpointExporter() {
            return new ServerEndpointExporter();
        }
    }
    

    2.2 定义连接端点

    使用@ServerEndpoint注解定义一个端点,且要用@Component注解交由spring 框架管理,不然此端点无法发布使用。

    @Component
    @ServerEndpoint("/jx/{name}")
    public class Server {
        @OnOpen
        public void onOpen(Session session, @PathParam("name") String name) {
            System.out.println("名称:" + name);
            System.out.println(session.getId() + "客户端连接");
        }
    
        @OnClose
        public void onClose(Session session, CloseReason reason) {
            System.out.println("client关闭");
            System.out.println("关闭原因:" + reason.getCloseCode() + reason.getReasonPhrase());
        }
    
        @OnMessage
        public void onMessage(Session session, String msg) {
            System.out.println("client" + session.getId() + "接收到的消息:" + msg);
            try {
                //返回消息给客户端
                session.getBasicRemote().sendText("服务端收到消息:" + msg);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    
        @OnError
        public void onError(Session session, Throwable throwable) {
            System.out.println(session.getId() + "发生错误");
            throwable.printStackTrace();
        }
    }
    

    3 创建客户端

    客户端与服务端基本是一样的,主要使用@ClientEndpoint来声明一个客户端,其他操作也是用@OnOpen、@OnMessage、@OnClose、@OnError这几个注解。

    @ClientEndpoint
    public class Client {
        @OnOpen
        public void onOpen(Session session) {
            System.out.println(session.getId()+"客户端连接");
        }
    
        @OnClose
        public void onClose() {
            System.out.println("client关闭");
        }
    
        @OnMessage
        public void onMessage(String msg, Session session) {
            System.out.println("client" + session.getId() + "接收到的消息:" + msg);
        }
    
        public static void main(String[] args) {
            try {
                WebSocketContainer container = ContainerProvider.getWebSocketContainer();
                Session session = container.connectToServer(Client.class, URI.create("ws://localhost:8080/jx/tom"));
                //控制台输入消息
                Scanner scanner = new Scanner(System.in);
                String msg;
                //输入quit退出
                while (!"quit".equals(msg = scanner.nextLine())) {
                    session.getBasicRemote().sendText(msg);
                }
                session.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    

    相关文章

      网友评论

          本文标题:websocket Java 客户端和服务端例子(一)

          本文链接:https://www.haomeiwen.com/subject/ayxgjltx.html