JAVA实现WebSocket服务器

背景

最近做一个物联网相关的项目,需要让服务器主动推送消息给客户端。简单的话可以在客户端进行ajax轮询,但对于服务器来说会有大量的无效请求,客户端一多还容易扑街,于是准备上WebSocket。

环境为Spring Boot。

思路

关于客户端

客户端连接上的时候,将该连接对象存入服务器内存中的Map集合中管理,key为客户端ID,value为该客户端的WebSocket连接对象。

由于WebSocket连接无法跨服务器,后期若扩展的话,想主动向指定客户端下发消息,只能通过中间件查询到该客户端的连接在哪台服务器后,再进行下发消息。

关于交互数据格式

在例如查询这种一应一答模式的操作中,依旧是走http请求,其他通知类的操作就走WebSocket。
交互的过程使用JSON格式的字符串,根据JSON字符串中type的值进行区分通知类型。如下则是一个初始化的通知:

{
   
    "type":"INIT",
    "client":"user"
}

项目依赖

<!-- https://mvnrepository.com/artifact/org.java-websocket/Java-WebSocket -->
<dependency>
    <groupId>org.java-websocket</groupId>
    <artifactId>Java-WebSocket</artifactId>
    <version>1.5.2</version>
</dependency>

实现

上面这个依赖可以帮我们更好的管理WebSocket消息,只需要继承WebSocketServer类即可监听各类事件:

public class Server extends WebSocketServer {
   

    public Server(int port) {
   
        super(new InetSocketAddress(port));
    }

    @Override
    public void onOpen(WebSocket conn, ClientHandshake handshake) {
   
        System.out.println("有人进来了");
    }

    @Override
    public void onClose(WebSocket conn, int code, String reason, boolean remote) {
   

    }

    
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值