使用tomcat8.0.36实现的websocket技术,实现向单个以及全部用户实时推送消息的功能

本文重点介绍了如何利用Tomcat 8.0.36的WebSocket功能,实现实时向单个用户及所有用户推送消息。通过在WebSocket连接开启时获取session,并在关闭时移除相关用户key来管理推送目标。

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

只讲重点,其他的可以查看我的上一篇博客,

首先定义两个全局变量:

	private Session session;//该session是websocket的session
	private static final Map<String,Object> connections = new HashMap<String,Object>();  //创建一个用来存所有连接过的session,这里的key我放的是userId

获取session是在websocket打开的时候,当关闭的时候,将该用户的key移除即可。

	@OnOpen // 成功连接时执行此代码
	public void onOpen(Session session, EndpointConfig config) {
		
		this.session = session;
		
		HttpSession httpSession= (HttpSession) config.getUserProperties().get(HttpSession.class.getName());
		fromUser = (User)httpSession.getAttribute("user");

		/**
		 * 将连接成功的用户存入connections内
		 */
		connections.put(fromUser.getUserId(), session);
		
		
		ac = new ClassPathXmlApplicationContext("beans.xml");
		hibernateTemplate = ac.getBean("hibernateTemplate", HibernateTemplate.class);
	
		System.out.println("------------webSocket is Open------------");
	}

	@OnClose // 连接关闭时执行
	public void onClose() {
		/**
		 * 当用户下线时,进行移除!
		 */
		connections.remove(fromUser.getUserId());
		System.out.println("------------webSocket is onClose------------");
	}

这样当你获取你想要推送消息的用户的websocket的session时,你就可以这样:

Session toUserSession = (Session)connections.get(toUserId);
toUserSession.getBasicRemote().sendText("我在给你推送消息啊!");
这样就可以将消息直接推送过去,被推送的用户,只需在前台的js的websocket的

webSocket.onmessage = function(event) //接受客户端消息
{
        onMessage(event);//在这里可以获取到数据!
};
如果是给所有人都推送,直接遍历所有的sesion然后挨个推送即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值