Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.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
服务器端Ruby进程与客户端Javascript之间的通信_Javascript_Ruby_Ajax_Asynchronous_Background Process - Fatal编程技术网

服务器端Ruby进程与客户端Javascript之间的通信

服务器端Ruby进程与客户端Javascript之间的通信,javascript,ruby,ajax,asynchronous,background-process,Javascript,Ruby,Ajax,Asynchronous,Background Process,上下文 我有一个应用程序,可以用Ruby处理耗时的文本。 当用户提交文本时,后台进程会处理该文本。 这个过程会在文本的新部分被处理后不断输出。 同时,用户被重定向到将输出处理过的文本的页面。 我的问题是:在给定PID的情况下,客户端的Javascript如何与服务器上运行的进程通信?可能吗?我是否需要将每个后台进程封装在自己的servlet中,该servlet在自己的端口上运行?它无法访问进程空间。要做到这一点,您需要一个HTTP接口。您可以使用长轮询来完成此操作。服务器可以定期输出文本,客户端

上下文

我有一个应用程序,可以用Ruby处理耗时的文本。 当用户提交文本时,后台进程会处理该文本。 这个过程会在文本的新部分被处理后不断输出。 同时,用户被重定向到将输出处理过的文本的页面。
我的问题是:在给定PID的情况下,客户端的Javascript如何与服务器上运行的进程通信?可能吗?我是否需要将每个后台进程封装在自己的servlet中,该servlet在自己的端口上运行?

它无法访问进程空间。要做到这一点,您需要一个HTTP接口。您可以使用长轮询来完成此操作。服务器可以定期输出文本,客户端脚本可以长时间轮询文本

请查看此处的长轮询示例:
它无法访问进程空间。要做到这一点,您需要一个HTTP接口。您可以使用长轮询来完成此操作。服务器可以定期输出文本,客户端脚本可以长时间轮询文本

请查看此处的长轮询示例:
考虑使用WebSocket。在我的Zend应用程序中,我编写了一个代理脚本,将数据包发送到JS。
另一种方法是设置setTimeout,每x秒询问http服务器进程是否已完成。

考虑使用WebSocket。在我的Zend应用程序中,我编写了一个代理脚本,将数据包发送到JS。
另一种方法是设置setTimeout,它每x秒询问http服务器进程是否已完成。

最简单的方法是使用or或类似方法,这样您可以将代码推送到包含PID的通道,客户端可以订阅相同的通道。这样,您就不需要设置HTTP应用程序。

最简单的方法是使用或类似的方法,这样您就可以将代码推送到包含PID的频道,客户端也可以订阅相同的频道。这样,您就不需要设置HTTP应用程序。

以下是我最后使用的策略:

创建一个小型Sinatra servlet来管理不同的作业。 收到的每个作业请求都分配了一个作业ID,并在分离的分叉流程中启动。 分叉进程使用用作堆栈的数组设置DRb服务。 然后,它在servlet上执行一个GET请求,该servlet将作业ID与DRb URI相关联。 当进程在后台继续执行时,它会将元素添加到堆栈中。 可以轮询主线程以返回堆栈中的下一个元素。 在servlet中建立到远程阵列的连接,并从堆栈中移动一个元素。 轮询将继续,直到堆栈上不再有要添加的元素,也不再有要返回到客户端的元素。 当堆栈为空时,进程终止。
有什么想法吗?

以下是我最后使用的策略:

创建一个小型Sinatra servlet来管理不同的作业。 收到的每个作业请求都分配了一个作业ID,并在分离的分叉流程中启动。 分叉进程使用用作堆栈的数组设置DRb服务。 然后,它在servlet上执行一个GET请求,该servlet将作业ID与DRb URI相关联。 当进程在后台继续执行时,它会将元素添加到堆栈中。 可以轮询主线程以返回堆栈中的下一个元素。 在servlet中建立到远程阵列的连接,并从堆栈中移动一个元素。 轮询将继续,直到堆栈上不再有要添加的元素,也不再有要返回到客户端的元素。 当堆栈为空时,进程终止。 有什么想法吗