JAVA中webSocket应用

该文介绍了如何在Java环境中利用Java-WebSocket库与京东、菜鸟等平台的云打印组件建立WebSocket连接,进行快递面单的打印。通过连接方法connectWS和发送消息方法sendMsg,实现了与指定URI的WebSocket服务器的交互,并设置了消息缓冲区大小和最大空闲时间。此外,还使用了缓存管理WebSocket会话,确保有效连接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.应用背景

现在去京东、菜鸟等平台拿快递面单,需用运用他们云打印组件,发送WebSocket指令进行快递面单打印,如下就是对webSocket简单应用。

2.导入jar包

<dependency>
       <groupId>org.java-websocket</groupId>
       <artifactId>Java-WebSocket</artifactId>
       <version>1.3.0</version>
</dependency>

3.进行webSocket工具类的编写

connectWS方法主要是进行webSocket链接,一般情况可以直接使用sendMsg方法进行连接和发送信息

@Slf4j
@Service
public class MyWSClientUtils {

    @Value("${websocket.message.size}")
    private Integer messageSize;

    @Value("${websocket.connect.time}")
    private Integer connectTime;


    private static String HEARTBEAT="ping";
    private static Cache<String, Session> wsCache = CacheBuilder.newBuilder()
            .initialCapacity(3)
            .expireAfterWrite(10, TimeUnit.HOURS) //10h 防止无用的session
            .build();

    /**
     * @param uri "ws://192.168.18.51:7206/websocket/001/Sea/1"
     */
    public synchronized Session connectWS(String uri){
        Session sessionInCache = wsCache.getIfPresent(uri);
        if(sessionInCache!=null&&sessionInCache.isOpen()){return sessionInCache;}
        try{
            if(sessionInCache!=null){sessionInCache.close();}
            log.info("start connect ws : {}",uri);
            WebSocketContainer container = ContainerProvider.getWebSocketContainer();
            //设置消息大小最大为500KB
            container.setDefaultMaxBinaryMessageBufferSize(messageSize);
            container.setDefaultMaxTextMessageBufferSize(messageSize);
            // 客户端,开启服务端websocket。
            Session session = container.connectToServer(WSClientHandler.class,URI.create(uri));
            session.setMaxIdleTimeout(connectTime);// 60S
            session.getBasicRemote().sendText(HEARTBEAT);
            wsCache.put(uri,session);
            return  session;
        } catch (Exception ex) {
            ex.printStackTrace();
            log.warn("c出错了 connect ws:{} exp:{}",uri,ex);
        }
        return  null;
    }

    /**
     * @param msg
     * @param uri : "ws://192.168.18.51:7206/ws/001/xx/1"
     * @return
     */
    public Boolean sendMsg(String msg,String uri) {
        try
        {
            Session session = connectWS(uri);
            session.getBasicRemote().sendText(msg);
            return true;
        }catch (Exception e){
            log.error("send msg exp:{}",e);
            return false;
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值