首先后台需要处理的消息的累心
- 1.连接
- 2.登陆
- 3.消息
- 4.消息答复
- 5.心跳
接下来我要详细说明后台数据每一次接受到不同消息后的处理方式
连接
连接是socket自带的连接,mina在接受到客户端连接后会执行openconnect的方法,此时什么事情都不要做,因为有可能是第三方伪造的连接
以下数据接受到时需检查是否为json数据,是否为我们定义的json类型数据,如果不是,请pass
登陆
客户端连接后会发送登陆信息,服务器接受到后
- 1.验证identity,至于怎么验证,仁者见仁,失败,自然不用说,关闭连接
- 2.如果成功,将此session,和user的信息疯转为一个类存入一个全局变量的集合中比如List,
这么做的目的就是可以通过user的信息找到session,然后主动的发送某些信息给用户 - 3.我们要检查数据库是否有消息未发送给此用户,然后打包,发送😄
tip:如果在全局变量中找到用户的session,说明用户之前登陆或,我们可以结束之前的会话释放资源。
消息
客户端在发送消息时,服务器接收到此数据,需要做几点
- 1.通过identity验证数据准确性
- 2.检查此信息在数据库是否存在,如果存在则直接答复源用户收到此消息后return
- 3.如果数据库不存在,写入数据库,此时数据的发送状态为0,表示未发送
- 4.找到目标用户,发送数据。
- 5.发送给源用户答复,告诉源用户我收到此数据了。
tip:记住完毕后此时的数据的发送状态为0,表示未发送
tip:告诉源用户我收到数据了,但是我不知道源用户收到此数据了没,不要紧😄,我们不是有对字符串的标识id吗,用户那边如果没有收到我的答复,大不了用户重发一次,服务器这边在第二步去重
消息答复
源用户发送给服务器,服务器发送信息给目标用户,需要收到目标用户的答复才能设置此数据的状态为1,表示已收到。否则,在目标用户下次登陆,再次推送。客户端去重
心跳
mina有一个ideal的时间,我们设定为90秒,如果超过90秒信道中未有信息传递,则中断连接释放资源,所以客户端需要每隔30秒发送心跳数据包,对于心跳我们可以不做处理。