javascript - 如何处理这种典型的 WebSocket 使用情况?

标签 javascript html architecture websocket socket.io

我编写了一个网页,其中有一个用户评论区。
任何经过身份验证的用户都可以发表评论。

由于许多用户几乎可以同时发表评论,我希望评论列表能够自动刷新。 因此,我考虑使用WebSockets

我的想法是关于此用例的良好/最佳实践:

  1. 发布评论后,WebSockets 进程是否应该读取数据库中的当前评论列表并发送包含所有新评论的 Json 响应?这将允许客户端直接在 DOM (JS) 上附加新注释。
    或者 WebSocket 应该只检查数据库(或者如果使用消息队列(例如 Redis、RabbitMQ 等)则检查队列)并执行如下操作:“嘿,我有新评论,如果您想查看它们,请单击此处!”。该解决方案只会表明新评论的存在,而不会将所有这些评论带给客户端。然后,客户端将涉及检索事件的工作流程(例如,通过单击这句话),例如使用传统的 Ajax 方向:客户端 => 服务器。

  2. 用户很有可能发表评论,然后导航到网站的另一个页面。因此,包含整个新评论的 Websocket 响应将毫无用处。这样就可以发出简单的通知,就像大多数已知网站所做的那样,例如使用“+1”计数器或更与“评论”场景相关:“1 个新评论可用”。

我应该选择哪种方式?

最佳答案

我认为决定推送哪些数据主要是 UI 可用性/用户体验的问题,而不是使用哪种技术与服务器交互。我们应该避免用服务器推送的数据来改变 UI,从而给用户带来负面的惊喜,例如在没有用户干预的情况下让评论源不断增长。

但在实时图表的情况下,最好将数据直接推送到图表中,这将是用户所期望的。

就评论源而言,大多数网站采用“点击加载”方法的原因是考虑到用户体验,所以我认为这可能是最好的方法。

关于javascript - 如何处理这种典型的 WebSocket 使用情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23045295/

相关文章:

asp.net-mvc - 服务层与业务层 - 区别?

javascript - 如何在 CoffeeScript 中定义全局变量?

c# - 在警报对话框中单击按钮时重定向

javascript - 使用 Javascript/Jquery 正确写入输入文本的 html 内部值

javascript - 如何抓取周围的td元素?

design-patterns - 将两个域对象组合到一个 View 中

javascript - 如何在 Canvas 元素内获取整个图像?

javascript - 将 javascript 对象键更改为属性值

php - 链接到同一 HTML 中 div 内的 div

.net - 我应该选择 N 层架构而不是 MVC 吗?