Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.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
Node.js 将实时组件集成到REST后端_Node.js_Rest_Websocket_Socket.io_Real Time - Fatal编程技术网

Node.js 将实时组件集成到REST后端

Node.js 将实时组件集成到REST后端,node.js,rest,websocket,socket.io,real-time,Node.js,Rest,Websocket,Socket.io,Real Time,我正在实现一个可以通过web和移动客户端访问的产品,并且正在进行彻底的研究,以确保在开始之前选择了一套好的工具。对于前端,我使用AngularJS(网络上的AngularJS+AngularUI,移动设备上的ionic+cordova),因为我希望有一个后端服务于所有类型的客户端,所以我计划实现一个RESTful服务(可能是一个接受并返回JSON数据的服务)。我倾向于使用Mongo、Node和Express来创建这个RESTful API,但我愿意接受这方面的建议 但我现在的症结在于:应用程序的

我正在实现一个可以通过web和移动客户端访问的产品,并且正在进行彻底的研究,以确保在开始之前选择了一套好的工具。对于前端,我使用AngularJS(网络上的AngularJS+AngularUI,移动设备上的ionic+cordova),因为我希望有一个后端服务于所有类型的客户端,所以我计划实现一个RESTful服务(可能是一个接受并返回JSON数据的服务)。我倾向于使用Mongo、Node和Express来创建这个RESTful API,但我愿意接受这方面的建议

但我现在的症结在于:应用程序的某些部分(例如,包括实时聊天/消息部分)需要是实时的。我了解用于实现实时web服务的各种技术和协议(Webhook、WebSocket、长轮询等)以及实现这些技术和协议并公开其功能的库和框架(SockJS、Socket.io等),我想澄清的是,我不是在问“什么是最佳框架”问题的类型


我的问题是如何正确地同时实现这两种服务。我应该将聊天与应用程序的其他部分分开提供吗?或者,是否有一种干净的方法将这两种不同的协议集成到同一个应用程序中?

express framework是非常模块化的,因此如果您愿意,它可以与websocket模块并排放置。这样做的最常见原因是通过在两个模块中使用相同的会话存储,跨http和WebSocket共享身份验证例程

例如,当用户登录时,您可以使用express framework通过http对其进行身份验证,这将允许访问您的聊天应用程序。从那时起,您将利用WebSocket的实时和快速协议,在服务器代码上,您将检查客户端随套接字消息发送的cookie,并检查请求是否对应于以前经过身份验证的会话。

如果您正在寻找一种通信协议来满足这两种需求(从客户端调用服务器,以及从服务器推送数据),您可以查看一下

WAMP是一个开放的WebSocket子目录,提供两个应用程序 统一协议中的消息传递模式:远程过程调用+ 发布和订阅

如果你想更深入一点,请描述原因、动机和设计。WAMP有不同的语言版本


现在,如果您想坚持REST,那么您不能在协议级别集成push(因为REST根本没有),而只能在“框架级别”。您需要第二个协议。选项包括:

  • 网袋
  • 服务器发送事件(SSE)
  • HTTP长轮询
  • SSE在某种程度上可能是REST的一个很好的补充。然而,它在IE上是不受支持的(甚至在IE11上也不受支持),而且还不清楚它是否会被支持

    WebSocket显然是有效的,但是为什么不让它在WebSocket上运行呢


    因此,在我看来,REST的自然补充是一些基于HTTP长轮询的机制,用于模拟推送。您可以使HTTP长轮询稳健地工作。您将不得不忍受HTTP的低效性和局限性(对于这样的用例)使用此解决方案。

    许多网站使用WebSocket进行聊天或其他推送更新,并通过AJAX提供一个单独的RESTful API,交付到同一页面。有很多理由让RESTful保持原样,特别是当缓存是一个问题时——WebSocket不会从服务器外部的web缓存中受益。WebSocket更好在任何一款现代浏览器上聊天,都可以用一个小的保持活动来换取一个重新连接的长轮询。因此,当考虑到扩展和每个用户的成本时,两个独立的界面增加了一点复杂性,您可能会从中受益


    如果你的应用程序增长到需要这种扩展,你会发现这实际上大大简化了事情——同一聊天组中的客户端可以映射到同一台服务器,负载平衡器可以适当地分发RESTful呼叫。

    你可以使用托管的实时消息(甚至存储)服务,并将其集成到你的前端应用程序中这些服务利用websocket协议,通常包括HTTP Comet回退

    最酷的是,你不需要管理基础设施的高可用性和无限的可扩展性,只需要专注于开发一款出色的应用程序


    我为Realtime工作,所以我有点偏颇,但我认为Realtime框架可以帮助你。更多信息,请参见

    这就是我所寻找的——你知道我可以参考的此类实现的任何案例研究/示例吗?是的,这是一个将express session cookie与socket.io一起使用的简单示例。