springboot业务功能实战(四)告别轮询,websocket的集成使用

org.springframework.boot

spring-boot-starter-websocket

加入配置类

@Configuration

public class WebSocketConfig {

/**

  • 注入ServerEndpointExporter,

  • 这个bean会自动注册使用了@ServerEndpoint注解声明的Websocket endpoint

*/

@Bean

public ServerEndpointExporter serverEndpointExporter() {

return new ServerEndpointExporter();

}

}

加入连接发送消息方法

@Component

@ServerEndpoint(“/websocket/{userName}”)

// 此注解相当于设置访问URL

public class WebSocket {

private Session session;

private static CopyOnWriteArraySet webSockets = new CopyOnWriteArraySet<>();

private static Map<String, Session> sessionPool = new HashMap<String, Session>();

private final static Logger logger = LoggerFactory.getLogger(LoginIntercept.class);

@OnOpen

public void onOpen(Session session, @PathParam(value = “userName”) String userName) {

this.session = session;

webSockets.add(this);

if (sessionPool.containsKey(userName)) {

sessionPool.put(userName + String.valueOf(session.getId()), session);

} else {

sessionPool.put(userName, session);

}

logger.info(“【websocket消息】有新的连接,总数为:” + webSockets.size());

}

@OnClose

public void onClose() {

webSockets.remove(this);

logger.info(“【websocket消息】连接断开,总数为:” + webSockets.size());

}

@OnMessage

public void onMessage(String message) {

logger.info(“【websocket消息】收到客户端消息:” + message);

}

/**

  • 功能描述: 此为广播消息

  • @param: [message] (消息)

  • @return: void ()

*/

public void sendAllMessage(String message) {

for (WebSocket webSocket : webSockets) {

logger.info(“【websocket消息】广播消息:” + message);

try {

if (webSocket.session.isOpen()) {

webSocket.session.getAsyncRemote().sendText(message);

}

} catch (Exception e) {

e.printStackTrace();

}

}

}

/**

  • 功能描述:此为单点消息 (发送文本) 现在可以发送给多客户端

  • @param: [userName, message] (接收人,发送消息)

  • @return: void ()

*/

public void sendTextMessage(String userName, String message) {

// 遍历sessionPool

for (String key : sessionPool.keySet()) {

// 存在当前用户

if (key.toString().indexOf(userName) != -1) {

Session session = sessionPool.get(key);

if (session != null && session.isOpen()) {

try {

session.getAsyncRemote().sendText(message);

} catch (Exception e) {

e.printStackTrace();

}

}

}

}

}

/**

  • 功能描述: 此为单点消息 (发送文本) 现在可以发送给多客户端

  • @param: [userName, message] (接收人,发送消息)

  • @return: void ()

*/

public void sendObjMessage(String userName, Object message) {

// 遍历sessionPool

for (String key : sessionPool.keySet()) {

// 存在当前用户

if (key.toString().indexOf(userName) != -1) {

Session session = sessionPool.get(key);

if (session != null && session.isOpen()) {

try {

session.getAsyncRemote().sendObject(message);

} catch (Exception e) {

e.printStackTrace();

}

}

}

}

}

}

发送信息

@RestController

总结

技术学到手后,就要开始准备面试了,找工作的时候一定要好好准备简历,毕竟简历是找工作的敲门砖,还有就是要多做面试题,复习巩固。

{

try {

session.getAsyncRemote().sendObject(message);

} catch (Exception e) {

e.printStackTrace();

}

}

}

}

}

}

发送信息

@RestController

总结

技术学到手后,就要开始准备面试了,找工作的时候一定要好好准备简历,毕竟简历是找工作的敲门砖,还有就是要多做面试题,复习巩固。

  • 21
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值