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

2021-05-22  本文已影响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();
        }
    }
}
上一篇下一篇

猜你喜欢

热点阅读