Java后端
·2025-03-03总结一下今天所学的知识
假设用户A、用户B、用户C都和同一个websocket服务器建立了连接;
1.当用户A对某个照片(假定id为pictureId)执行了一个编辑操作,会触发监听事件,通过websocket类的sendMessage方法向我们
的服务器发送一条消息。
2.然后websocket的拦截器监听到这条消息,先对用户A权限和参数的合法性进行校验,然后将一些参数存储在我们的作用域
中,执行的是setAttributes方法
3.拦截器校验成功之后,websocket的处理器handler中的handleTextMessage方法就会执行,在该方法中,我们会将拦截器方法
中存储的参数获取到,然后传递给disruptor的消息生产者PictureEditEventProducer
4.PictureEditEventProducer方法中,我们会将接收到的参数封装成一个Event事件,然后把这个事件放到环形缓冲区中(具体是
怎么放的呢?首先通过next()方法获取存储的下标位置,然后获取到该位置上存储的空event对象,然后往这个对象里面赋
值),最后交给我们的事件处理者处理即可!
5.PictureEditEventWorkHandler类是实现了WorkHandler<PictureEditEvent>接口的,当环形缓冲区中存在事件的时候,
onEvent方法就会自动执行。
5.1 会从事件中获取到要执行方法的type,然后根据不同的type,再次调用websocket的handler
5.2 然后websocket的handler执行完毕之后,就会调用broadcastToPicture方法继续广播(如果是)
6.用户B/C接收到客户端发送的消息之后,还是之前一样的逻辑。websocket的onmessage执行,然后onmessage方法里面的
triggerEvent方法执行,所带的on方法也会被触发执行。
---------------------用户与websocket服务器建立连接的过程--------------------------
1.用户向websocket发送建立连接的请求。
2.然后websocket的拦截器监听到这条消息,先对用户权限和参数的合法性进行校验,然后将一些参数存储在我们的作用域
中,执行的是setAttributes方法
3.拦截器校验成功之后,websocket的处理器handler中的afterConnectionEstablished方法执行,在该方法中,我们会将该用户
的session添加到该pictureId对应的一个set集合中,然后广播一条消息(这里也包括自己,不包括自己的方法也实现了)
3.1 广播一条消息之后,其他用户websocket监听到有消息来之后,onmessage方法会被触发执行,在这个方法中会执行一
个this.triggerEvent()方法
3.2 该方法执行之后,又会触发我们type类型的的on方法(这个on方法是我们自定义的,我们可以根据传来的type,然后执行
不同的逻辑),然后这个on方法就会有类似于message.info(xxx),就会在每个用户的页面上显示:xxx加入了编辑空间
4
0
分享
操作
评论
问答助学
相关内容
0个评论
全部评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
