我正在实施一个可以通过网络和移动客户端访问的产品,我正在进行彻底的研究,以确保在开始之前我已经选择了一套好的工具。对于前端,我使用AngularJS(web上的Angularjs + angular-ui,移动设备上的ionic + cordova),因为我希望有一个服务于所有类型客户端的后端,我计划实现一个RESTful服务(可能是一个)接受并返回JSON数据)。我倾向于使用Mongo,Node和Express来创建这个RESTful API,但我愿意接受这方面的建议。
但现在我的关键点是:应用程序的某些部分(包括,例如,实时聊天/消息传递部分)需要是实时的。我知道实现实时Web服务的各种技术和协议(webhooks,websockets,长轮询等)以及实现它们并公开该功能的库和框架(SockJS,Socket.io等)和我想要清楚的是,我并没有问其中一个“最好的框架”类型的问题。
我的问题是关于并排实施这两种服务的正确方法。我是否应该与其他应用程序分开提供聊天服务?或者是否有一种干净的方法将这两种不同的协议集成到同一个应用程序中?
答案 0 :(得分:2)
快速框架非常模块化,因此如果您愿意,它可以与websocket模块并排放置。执行此操作的最常见原因是通过在两个模块中使用相同的会话存储来跨http和websockets共享身份验证例程。
例如,您将在登录时使用快速框架通过http对用户进行身份验证,这将允许访问您的聊天应用程序。从那时起,您将利用websockets的实时和快速协议,并在您的服务器代码上检查客户端使用套接字消息发送的cookie,并检查该请求是否与之前经过身份验证的会话相对应。
答案 1 :(得分:2)
许多网站使用websockets进行聊天或其他推送更新,并将基于AJAX的单独RESTful API传递到同一页面。将RESTful事物保留原样是有充分理由的,特别是如果缓存是一个问题 - websockets无法从服务器外部的Web缓存中受益。 Websockets更适合在任何现代浏览器上进行聊天,这种浏览器可以为重新连接的长轮询进行小型保持活动。因此,当考虑扩展和每用户成本时,两个独立的接口会增加一些您可能会受益的复杂性。
如果你的应用程序增长到足以需要这种扩展,你会发现这实际上大大简化了事情 - 同一个聊天组中的客户端可以映射到同一个服务器,负载均衡器可以适当地分配RESTful调用。 / p>
答案 2 :(得分:1)
如果您正在寻找一个通信协议来满足这两种需求(从客户端调用服务器,以及从服务器推送数据),您可能需要查看{{3} }。
WAMP是一个开放的WebSocket子协议,提供两个应用程序 一个统一协议中的消息传递模式:远程过程调用+ 发布&订阅
如果你想深入挖掘,WAMP描述了原因,动机和设计。 WAMP使用不同语言的this。
现在,如果您想坚持使用REST,那么就无法在协议级别集成推送(因为REST根本就没有),而只是在“框架级别”。你需要第二个协议。选项包括:
SSE在某种程度上可以成为REST的良好补充。但是,它在IE上是不受支持的(甚至不是IE11),目前还不清楚它是否会出现。
WebSocket显然有效,但为什么不将它全部运行在WebSocket上呢? (这种思路导致了WAMP)。
因此,IMO REST的自然补充将是一些基于HTTP长轮询的模拟推送机制。您可以强有力地使HTTP Long-poll工作。这个解决方案你必须忍受HTTP的低效率和限制(对于这样的用例)。
答案 3 :(得分:1)
您可以使用托管的实时消息(甚至存储)服务,并将其集成到您的前端应用程序(Web和移动设备)中。这些服务利用websocket协议,通常包括HTTP Comet后备。
很酷的是,您不需要在高可用性和无限可扩展性方面管理底层基础架构,而只关注开发优秀的应用程序。
我为Realtime工作,所以我有点偏颇,但我认为Realtime Framework可以帮助你。更多http://framework.realtime.co