现在在做一个实时系统,基于stomp over websocket的,对用户的在线状态有很高的要求
用户上线是以连接上websocket服务器为标准的,而下线(例如直接关机)则是断开连接
但是用户要先通过Http服务器获取密钥才能连上websocket服务器(通过http的验证后,
http_server会将用户信息push入redis作为websocket server的判断标准)
因此现阶段是用redis做服务器集群的状态统一的,即缓存系统中有if_websocket_connected作为是否上线的标准
同时也就是说业务数据库(oracle),里面的用户没有在线状态字段
1.现阶段用户批量查询其它用户时,httpserver查询出符合条件的用户List
然后迭代器遍历,逐个填充在线状态,如果条件包含在线状态,则去除队列中不符合条件的用户
因为我是用spring-redisTemplate操作redis的
因此批量一开始我是不停的拿连接,释放,拿连接,释放。。。。现在想改成pipline方式(正在尝试)..
但是想到,用户前端批量查询是带分页条件的。。。我这样做就不符合这个需求了。。。
2.所以就想第二种做法了。。。改为用业务数据库去做在线状态记录,但是这涉及两个改动,(1)数据库加字段.(2)websocket服务器要集成一个orm或者jdbc
这里我要说明一下,websocket-server和http-server是完全独立的,websocket-server主要操作redis(登录验证,状态记录)和hbase(通信日志与行为日志)
http-server主要操作redis(验证消息记录,httpapi安全访问密钥验证)和orable(业务数据)
所以我想保证集群个体的独立性
http-server中还有一套基于http的大文件断点续传的api,也是对用户状态验证十分严格的。
请原谅我码了这么多字。。。。这个系统是我一个人做的,用于毕设。。。大家推崇哪种做法,或者给我一个好的思路,只要思路就好了。
好吧,没人。。。