现在项目有几个接口是通过轮询来查询的现在需要改造成web socket。以前没接触过,现在有几个疑问,望解答
例子:比如商品详情页,评价列表可以实时更新。
1.已有的评价内容也走web socket吗?
2.集群环境下会不会存在重复推送的情况呢?如果有,如何解决呢?
3.网上大多是聊天室demo,现在困惑的地方是,后端如何得知前端需要商品A的评价?如果用户打开了商品A和商品B两个页面,如何区分推送呢?
现在项目有几个接口是通过轮询来查询的现在需要改造成web socket。以前没接触过,现在有几个疑问,望解答
例子:比如商品详情页,评价列表可以实时更新。
1.已有的评价内容也走web socket吗?
2.集群环境下会不会存在重复推送的情况呢?如果有,如何解决呢?
3.网上大多是聊天室demo,现在困惑的地方是,后端如何得知前端需要商品A的评价?如果用户打开了商品A和商品B两个页面,如何区分推送呢?
1.评论内容不需要实时刷新,所以不需要websocket,只有聊天窗口,系统消息提醒才需要websocket,评论内容只需要每次用户进入页面时获取就可以。但是可以通过websocket在系统消息处做提醒。
2.不会,集群的原理是,客户端A,B,C,D分别与集群环境下的主机E,F,建立websocket连接(A->E,B->E,C->E,D->F),集群环境下的E,F共同监听消息队列或者缓存数据库(比如redis)的频道,
以redis举例:
当用户A想与D通信时,
第一步A发送消息到主机E。
第二步主机E通过redis进行广播,对所有监听频道的主机E,F同时广播。
第三步主机F收到广播,发现自己与D没有建立链接,消息停止发送,主机E收到广播发现自己与D有链接,发送消息成功。
由于客户端只能与集群环境的唯一一台主机建立连接,所以不会针对客户端发送多条消息。
3.websocket消息分为一对一,一对多模式。
用户在客户端接收消息是属于一对多模式,由系统群发商品被评论的消息,不需要根据页面进行分别推送。
第一,用户是客户端,一定与集群环境的一台主机建立的websocket链接。
第二,当用户C打开商品A,B页面,如果用户D评论A,D通过他的websocket连接将信息发送至服务端,服务端通过群发消息,即向C,D群发A被评论的信息,
如果还有用户E也打开了商品A页面,他也能收到
第三,消息内容可以定义(D评论了A),所以D客户端可以选择性过滤,不接收此消息。
推荐一款可做websocket集成的框架,在gitee上star已达5.1k,bug较少,稳定性较高。并且具有强制下线客户端,客户端登录唯一性控制等功能
CIM是一套基于netty框架下的推送系统,或许有一些企业有着自己一套即时通讯系统的需求,那么CIM为您提供了一个解决方案,目前CIM支持websocket,android,ios,桌面应用,系统应用等多端接入支持,可应用于移动应用,物联网,智能家居,嵌入式开发,桌面应用,WEB应用以及后台系统之间的即时消服务