如何处理这种典型的WebSocket使用情况
How to handle this typical case of WebSocket usage?
我写了一个网页,里面有一个用户评论区
任何经过身份验证的用户都可以发表评论。
由于许多用户几乎可以同时发布评论,我希望评论列表能够自动刷新。因此,我考虑使用WebSockets。
我的想法是关于这个用例的一个好/最佳实践:
-
一旦发布了评论,WebSockets进程是否应该读取数据库上的当前评论列表,并发送包含所有新评论的Json响应?这将允许客户端直接在DOM(JS)上附加新的注释
或者WebSocket应该只检查数据库(例如,如果使用消息队列(Redis、RabbitMQ等),则进行队列检查),并像这样操作:"嘿,我有新的评论,如果你想查看,请单击此处!"。这个解决方案只会发出新评论的信号,而不会将所有这些评论带到客户端。然后,客户端将涉及检索事件的工作流(例如,通过单击这句话),例如使用传统的Ajax方向:client=>server。 -
用户很有可能发布评论,然后导航到网站的另一个页面。因此,一个包含全新注释的websocket响应将是无用的。然后,一个简单的通知就可以了,就像大多数已知网站所做的那样,例如使用"+1"计数器或与"评论"场景更相关的计数器:"1条新评论可用"。
我应该选择哪条路?
我认为决定推送哪些数据主要是UI可用性/用户体验的问题,而不是使用哪些技术与服务器交互。我们应该避免用服务器推送的数据更改UI,这会给用户带来负面的惊喜,例如,在没有任何干预的情况下,评论源不断增长。
但在实时图表的情况下,最好将数据直接推送到图表中,这将是用户的期望。
在评论提要的情况下,大多数网站采用"点击加载"方法的原因是因为用户体验,所以我认为这可能是最好的方法。
我使用两者的组合。。。。
在某些页面中,websocket通信包含实际数据——有点像股票行情更新。
在其他情况下,websocket通信只是说——所有查看xyz数据的用户——刷新它。然后浏览器执行ajax来获得新数据,网格被智能地刷新,这样屏幕上只有更改的单元格才能使用innerHTML修改,新行被添加,删除的行被删除。
在像stackoverflow这样的情况下,显示一条消息是有意义的,"有新东西要显示——想看吗?"
当我在浏览器中建立websocket时,我会在url中传递页面Id,cookie也会被传递。所以websocket服务器知道——用户cookie和正在查看的页面。
然后,在数据库(或中间层逻辑)中,通过以下消息与websocket服务器通信:此消息适用于查看"xyz"页面的用户:智能刷新网格"abc"。并且websocket服务器广播消息。
因为协议允许你传递任何你喜欢的东西,所以你有能力随心所欲地传递。
我建议它在每种特定情况下都要做最好的事情。
- 通过 Websocket 发送的 JSON 对象的大小
- 如何访问使用websocket发送的烧瓶中的formData?Flask SocketIO
- ASP.NET 5 WebSocket 连接的错误 404
- 打开 Websocket 之前的身份验证
- 对通过 WebSocket 发送的数据进行速率限制
- WebSocket-无效的状态行javascript
- 在典型的GridView中,如何区分<td>
- 使用RabbitMQ的WebSocket上的AMQP
- Play Framework如何处理WebSocket中的CloseEvent
- 与Ruby和EM::WebSocket::Server的WebSocket握手
- 非典型的清除浮动错误
- Websocket上的erlang错误-总是将请求传递给loop而不是ws_loop
- 有“典型的”吗?私有变量的用法
- WebSocket JS的自定义头
- 如何对典型的JSON使用ng-repeat
- 为什么我们不能在定义WebSocket对象的委托后手动打开它的连接?
- parseInt返回WebSocket数据的奇怪值
- 解码websocket中的延续帧
- 使用Canvas API时,有哪些典型的设计模式?
- 如何处理这种典型的WebSocket使用情况