最近在做消息中心模块,想要实现消息实时推送到前端页面展示,直接摒弃了前端定时轮训调用接口来获取消息数据的方式,采用了WebSocket服务端推送。
流程是首先前端跟后端应用新建一个连接,并携带当前登录的用户ID,此时WebSocket会创建一个WebsocketSession来唯一绑定该连接,我们会在后端用Map建立用户ID与Session的映射关系:
后续有新消息到达时,就可以通过该Map映射找到指定用户ID对应的session来推送消息。但有一个问题,后端是多应用节点,每个节点维护一个这样的Map, 无法共享WebsocketSession ,而且 redis也无法对WebsocketSession序列化后进行存储 。
由于项目目前用到了Redis,所以可以 采用Redis的发布/订阅功能来实现WebsocketSession共享问题。
1新建一个对象,属性有userId, message,用于发送消息
2 当新消息到达时,将消息注册到redis指定topic的频道上
3每个应用节点都订阅该topic的频道,这样新消息一注册,每个节点都能接收到Object,然后从Object中获取userId,再从映射Map中获取userId对应的WebsocketSession(在哪个节点建立的连接和Map映射关系,就会在哪个节点找到对应的session),进行消息推送。
就这样通过Redis的发布/订阅功能实现session共享。当然在步骤2,新消息到达时,可以先在本节点的Map映射中查找是否有userId对应的session,如果有,直接推送消息,而且不必要再将消息注册到redis中。
主要就是ajax获取数据,当然也可以通过websocket获取数据。其中ajax是获取数据最主要的方式,后台写好的接口,前端通过发送请求,来获取后台返回的数据,然后通过js解析,渲染到页面上。websocket也可以获取数据,后台服务器可以推送消息给前端,前端通过websocket的onmessage回调函数来接收后端发送的数据。
流程:
监听端口
接受连接
进行websocket握手
握手成功后的连接进行数据处理
返回响应数据
你还有不懂可以上后盾人上看看,上面有很多高清教学视频,讲得都是这些知识,可以帮助你!如果不行,可以去百度搜索
sessionStorage 数据创建到浏览器页签关闭
localStorage 数据创建到用户手动清除,或者使用clear(), removeItem(key)删除
sessionStorage 条件:同一个浏览器页签
localStorage 条件:相同域名(协议,域名,端口)的不同网址
频繁 *** 作且安全性不高的数据
增加一条数据
根据key值获取一条数据
根据指定的key删除一条数据
清除所有数据
获取指定索引位的key值
数据项个数
宽高不要写单位,宽高不要在css中设置
默认从左到右,从上到下绘制,宽高为负值的时候往返方向绘制
设置填充颜色(可设置渐变色)
合法的颜色值,rgba(255,255,255,5)
设置描边颜色(可设置渐变色)
填充矩形
设置画笔宽度
描边矩形
开始绘制新的路径,相当于抬起画笔
把路径移动到画布中的指定点,不创建线条
添加一个新点,然后在画布中创建从该点到最后指定点的线条
设置或返回线条末端线帽的样式
设置或返回两条线相交时,所创建的拐角类型
创建从当前点回到起始点的路径,创建线条
绘制已定义的路径
清除指定区域内的像素
创建弧/曲线(用于创建圆形或部分圆)
绘制两条切线之间的弧线
设置或返回文本内容的当前字体属性
设置或返回文本内容的当前对齐方式,水平对齐方式
可选值: center,start ,end,left,right
设置或返回在绘制文本时使用的当前文本基线
可选值: alphabetic ,top ,hanging ,middle , ideographic ,bottom
在画布上绘制文本
创建线性渐变(用在画布内容上)
创建放射状/环形的渐变(用在画布内容上)
设置或返回用于阴影的颜色
设置或返回用于阴影的模糊级别
paintshadowBlur = 100;
设置阴影偏移
向画布上绘制图像、画布或视频
转换有叠加效果,如果之前有转换,会在之前转换的基础上再次转换
缩放当前绘图
旋转当前绘图
重新映射画布上的 (0,0) 位置
可选值:
设置或返回绘图的当前 alpha 或透明值
保存之前paint设置的样式
重新回到之前保存的样式
建立连接成功
接收服务器信息, evendata 包含返回的信息
发生错误
关闭通信
当音频元数据加载完毕时触发。
播放过程中实时触发
声音改变时触发
以上就是关于WebSocket Session共享全部的内容,包括:WebSocket Session共享、网页端数据获取有哪些方式呢、本质就是websocket的客户端,php Websocket 怎么接收数据等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)