Nodejs中服务器到客户端的通信?

时间:2020-01-17 23:37:06

标签: mysql node.js

我有一个Nodejs应用程序,该应用程序使用Mysql作为数据库,快递和通行证来管理用户身份验证。一次可以有20-30个用户连接到我的Nodejs应用程序。

现在,我的应用程序中有某些页面,多个用户可以同时处理同一页面。因此,如果一个用户更改了该字段的值,另一用户也将看到该更改。到目前为止,我只是使用Setinterval函数,该函数每5秒运行一次,并将ajax请求发布到Nodejs服务器,然后在必要时重绘用户字段。到现在为止,这一切都很好,但是现在我决定,我想要应用程序中的其他页面以这种方式工作。这意味着我的Nodejs服务器每秒钟都会发生多次回发,以运行mysql查询。我对Node.js很陌生,我不确定这是否是处理这种情况的最佳方法。

我在徘徊,是否有一种方法可以将新的字段数据发送给客户端,而无需客户端请求并为它们重新绘制DOM。

1 个答案:

答案 0 :(得分:2)

浏览器内置了两种解决方案,服务器可以将数据直接发送到连接的客户端。

  1. webSocket connections
  2. Server sent events

使用每种技术,客户端都可以在任何给定的网页上建立这两种类型的连接之一,然后服务器可以在需要时发送客户端数据。

webSockets是两种通信渠道。服务器发送的事件是单向的(数据从服务器发送到客户端)。服务器发送的事件被设计为效率更高一些,但是它们可以做的事情受到更多限制。

重要的是要意识到客户端和服务器之间的持久连接仅在浏览器中当前页面的持续时间内。如果最终用户切换到另一个网页(甚至您网站上的另一个页面),那么浏览器将关闭您当前的连接。如果该新网页需要类似的连接,则它将在新页面上建立一个新连接。

使用从浏览器到服务器的这些类型的连接,您的服务器随后将跟踪每个连接以及每个连接的一些标识信息(例如用户名或用户ID)。然后,当服务器上的数据发生某些更改时,您的服务器可以确定应将更改通知给哪些客户端,并通过其连接发送新数据。然后,客户端接收到该数据并使用Javascript更新网页的外观(显示新数据,更新状态等)。

仅供参考,还有一个流行的库socket.io可以在webSocket上运行,并添加了许多有用的功能outlined here(例如,连接失败检测,自动重新连接,消息传递层,等等...)。您将在客户端和服务器中都使用socket.io库来添加这些功能。