赞
踩
现在去京东、菜鸟等平台拿快递面单,需用运用他们云打印组件,发送WebSocket指令进行快递面单打印,如下就是对webSocket简单应用。
- <dependency>
- <groupId>org.java-websocket</groupId>
- <artifactId>Java-WebSocket</artifactId>
- <version>1.3.0</version>
- </dependency>
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;
- }
- }
- }

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。