Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 通过JSON RPC vs signal/Node.JS推送消息_Javascript_Node.js_Push Notification_Signalr_Json Rpc - Fatal编程技术网

Javascript 通过JSON RPC vs signal/Node.JS推送消息

Javascript 通过JSON RPC vs signal/Node.JS推送消息,javascript,node.js,push-notification,signalr,json-rpc,Javascript,Node.js,Push Notification,Signalr,Json Rpc,我正在为我的web服务使用拉机制。现在我们要朝着推动机制发展。我知道Signal和NodeJS正是出于这个目的 也有人提到JSON RPC。我对它知之甚少,搜索谷歌并没有给我结果,我可以用它来推动机制 另外,值得注意的是,我的web服务客户端完全是JavaScript客户端。没有服务器端语言 谢谢这取决于你所说的“推”是什么意思 我正在为我的web服务使用拉机制。现在我们要搬家了 朝向推动机构。我知道Signer和NodeJS会这么做 目的 对大多数人来说,“推送”只是意味着发布/订阅模型用于预

我正在为我的web服务使用拉机制。现在我们要朝着推动机制发展。我知道Signal和NodeJS正是出于这个目的

也有人提到JSON RPC。我对它知之甚少,搜索谷歌并没有给我结果,我可以用它来推动机制

另外,值得注意的是,我的web服务客户端完全是JavaScript客户端。没有服务器端语言


谢谢

这取决于你所说的“推”是什么意思

我正在为我的web服务使用拉机制。现在我们要搬家了 朝向推动机构。我知道Signer和NodeJS会这么做 目的

对大多数人来说,“推送”只是意味着发布/订阅模型用于预先设定在将来某个未知时间从服务器发送到客户端的数据预期

正如您所说,您在浏览器中使用JavaScript,那么您就有了该环境中产生的所有固有限制。浏览器中异步双向通信的各种实现(例如:,)甚至一些push-like技术()已经实现

真正的“推送”依赖于服务器通过网络向客户端发送消息的能力,而这一能力并不好用;客户端大多不允许传入连接,许多客户端都支持NAT

是否有人在推动这一议程时可能不了解技术方面的考虑?为什么要“推”?通常这种讨论的中心是减少服务器上的资源(例如:开放套接字)。这是怎么回事?背景是什么


也有人提到JSON RPC。我对此知之甚少 搜索谷歌并没有让我知道我是否可以使用它 用于推动机构

该协议只是通过两台主机之间的双向通信通道发送JSON的协议(约定方式)

JSON-RPC协议确实描述了“”类型的消息,这些消息(理论上)不需要通过“请求-响应”消息进行请求。e、 g:

  • 客户端可以向服务器发送“通知”消息
  • 服务器可以向客户端发送“通知”消息
(阅读规范时,它似乎专注于客户端到服务器的“通知”,但在早期的草案/讨论中,情况并非如此,JSON-RPC肯定不是最面向标准的社区:-)


另外,值得注意的是,我的web服务客户端完全 JavaScript客户端。没有服务器端语言

JSON-RPC的实现受到其传输协议的极大限制。(例如:HTTP)

当通过普通HTTP(例如通过
XMLHttpRequest
)实现时,服务器无法在响应之前的某个请求之外联系客户机——这意味着虽然可以使用客户机-服务器“通知”消息,但不能使用服务器-客户机“通知”(类似推送的)消息

当通过TCP套接字(在浏览器中不可用)实现时,服务器完全可以向客户端发送“通知”消息(只要套接字打开,并且客户端准备在类似RPC的请求-响应周期之外异步处理接收到的消息)


可能的解决办法:

(1) 如果您通过一些预先存在的基于浏览器的异步双向传输协议(WebSockets,WebRTC)而不是AJAX实现JSON-RPC,那么您可以非常接近正确的JSON-RPC双向“通知”消息。在这两种情况下,都需要一些高级设置,但正如您所说的“推送”,那么不管怎样这都是需要的(pubsub)

(2) 另一种方法是让客户端轮询成批通知(标准请求/响应样式的消息),这些通知可能返回为空数组,也可能是一个或多个“通知”子消息

这两种基于浏览器的方法都不是真正的“推送”,因为它们都不需要进行一些底层的客户端到服务器(请求-响应)通信