如何在API和Rails应用程序之间创建全双工通信?

我有一个video转码API和一个消耗它的CMS应用程序。

工作流程如下:

  • CMS向API发送GET请求以获取要转码的列表video文件,并以JSON格式获得答案。
  • CMS用户选择要转码的文件并单击“转码”按钮。
  • 当用户单击该链接时, POST请求将转到API,API会在内部创建必要的Progress es,并以JSON格式响应初始状态。
  • 在API上创建Progress es后,我向API发出GET ajax请求,定期询问当前进程状态。 因为我需要向用户显示转码过程的当前状态(如百分比……)。
  • 另外,我还有一些其他资源可以通知CMS有关当前状态的信息。

这时,我在5秒钟内对API进行一次ajax调用。

这是一个问题:

这是最好的方法吗?

有没有办法在API和Rails应用程序之间创建全双工通信?

我尝试过pusher和推送通知但看起来它们只是用于前端通信? 这是真的?

我听说过websocket但我找不到一个好的资源来完全理解它。

Rails社区获得批准的方式是什么?

谢谢

澄清一下:您需要的不仅仅是服务器 – >客户端通信,因为您需要通知用户/浏览器以及CMS中的其他组件有关进度的信息。

注意:不确定API编写的是什么技术所以我会假设Ruby

基于这个Faye可能是一个非常好的解决方案。 Web浏览器和CMS服务器都可以是Faye客户端,并且可以从API订阅更新。 API可以根据正在转码的video文件向适当命名的频道发布更新。

浏览器< - > API Faye服务器通信将通过WebSocket或后备传输。 CMS < - > API Faye服务器通信可以使用相同的传输类型,也可以使用引擎(例如redis)。

  • CMS向API发送GET请求以获取要转码的列表video文件,并以JSON格式获得答案。
  • CMS用户选择要转码的文件并单击“转码”按钮。
  • 当用户单击该链接时,POST请求将转到API,API会在内部创建必要的Progresses,并以JSON格式的进度和进度更新通道的初始状态进行响应。
  • 在API创建Progresses后,客户端订阅更新频道。 随着进度的变化,API会将更新进度发布到通道,客户端将收到更新。
  • CMS也需要知道进度通道。 它可以通过拥有它始终订阅的频道来实现。 然后,API可以在该信道上发布所有代码转换信息,例如video-transcoding 。 当它看到新的转码已经开始时,它可以订阅该频道以进行特定的video转码更新。

可能双向通信不是100%必需的。 看起来API需要将更新推送到CMS和客户端。 如果是这种情况, EventSource / Server-Sent Events可能是一个选项。 如果您不希望CMS与API建立持久连接,而是希望通过HTTP将更新推送到它,则可以向API添加WebHook支持; 在进展中,它向CMS发出HTTP请求以通知其进度。