我想在调用函数时将消息从服​​务器发送到客户端。使用this answer消息中的代码,可以每秒成功地将消息从服​​务器发送到客户端。

我正在构建一个在后台运行节点的应用程序,理想情况下,我希望能够单击一个按钮,该按钮将调用节点server.js文件中的一个函数,该文件接受参数并将该消息发送给客户端。该函数看起来像这样

function sendToClient(message) {
    clients[0].emit('foo', msg);
}

这会将传递的消息发送到第一个客户端。我该怎么办?

在终端中,运行node server.js后,有一种方法可以使用终端从服务器文件中调用函数,如果可以的话,这可能是一种解决方案。

最佳答案

现在,从服务器向客户端发送消息的最佳方法是使用webSockets。基本概念是这样的:

  • 客户端A从服务器B加载网页。
  • 客户端A运行一些javascript,以创建到服务器B的webSocket连接。
  • 服务器B接受webSocket连接,并且套接字在网页有效期内保持打开状态。
  • 服务器B注册事件处理程序以处理来自网页的传入消息。
  • 客户端A注册事件处理程序以处理来自服务器的传入消息。
  • 在任何时间点,服务器都可以主动将数据发送到客户端页面,并且它将接收该数据。
  • 在任何时间点,客户端都可以将数据发送到服务器,并且它将接收该数据。

  • 一个使webSocket支持非常容易的流行的node.js库是socket.io。它同时具有客户端和服务器支持,因此您可以在连接的两端使用相同的库。 socket.io库支持您的问题中提到的.emit()方法,用于通过 Activity 的webSocket连接发送消息。

    您不会直接从客户端到服务器调用函数。而是发送一条消息,触发服务器运行某些特定的代码,反之亦然。这是一种协作编程,其中必须对远程端进行编码以支持您要它执行的操作,因此您可以向它发送一条消息和一些可选数据,以随消息一起发送,然后它可以接收该消息和数据并执行一些编码。

    因此,假设您希望服务器在温度变化时随时告诉客户端,以便客户端可以在其网页上显示更新的温度(我实际上有一个Raspberry Pi node.js服务器可以做到这一点)。在这种情况下,客户端网页在页面加载时会建立与服务器的webSocket连接。同时,服务器有其自己的过程来监视温度变化。当发现温度已经发生了有意义的变化时,它将向温度和温度变化的消息发送给每个连接的客户端,并带有新的温度数据。客户端接收到该消息和数据,然后使用该消息和数据更新其UI以显示新的温度值。

    交易也可以采取其他方式。客户端可以具有一个信息矩阵,它希望服务器对其进行一些复杂的计算。它将以消息类型中指示的计算类型将消息发送到服务器,然后将矩阵作为消息的数据发送。服务器将收到该消息,看到这是对某些数据进行特定类型的计算的请求,然后它将调用适当的服务器端函数并将其传递给客户端数据。在服务器上完成结果后,它将把结果发送给客户端。客户端将接收到该结果,然后对计算出的结果进行任何所需的处理。

    注意,如果事务仅是从客户端到服务器的响应,然后是从服务器返回的,则该类型的事务不需要webSocket。只需使用Ajax调用即可完成。客户端对服务器进行ajax调用,服务器制定响应并返回响应。如果您要启动来自服务器的通信并在服务器决定的时间将不请自来的数据发送到客户端,则webSockets最有用的地方是。为此,您需要在客户端和服务器之间建立一些连续的连接,这就是webSocket的设计目标。

    似乎您的问题还有更多关于如何从C#服务器与node.js服务器进行通信的问题,以便它随后可以通知客户端。如果是这种情况,那么由于node.js服务器已经是一个Web服务器,所以我只需添加一条到node.js服务器的路由,这样您就可以简单地从C#服务器向node.js服务器发出一个http请求。将一些数据传递到node.js服务器,然后它可以通过上述webSocket连接用于通知适当的客户端。根据您的安全需求,您可能需要实现某种级别的安全性,以便http请求只能从C#服务器本地发送,而不能从外界发送到node.js服务器。

    关于javascript - 通过函数调用将消息从Node.js服务器发送到客户端,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28952348/

    10-08 21:02