如何呢
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加入了编辑空间
0个评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
下载 APP