服务器端Ruby进程与客户端Javascript之间的通信
上下文 我有一个应用程序,可以用Ruby处理耗时的文本。 当用户提交文本时,后台进程会处理该文本。 这个过程会在文本的新部分被处理后不断输出。 同时,用户被重定向到将输出处理过的文本的页面。服务器端Ruby进程与客户端Javascript之间的通信,javascript,ruby,ajax,asynchronous,background-process,Javascript,Ruby,Ajax,Asynchronous,Background Process,上下文 我有一个应用程序,可以用Ruby处理耗时的文本。 当用户提交文本时,后台进程会处理该文本。 这个过程会在文本的新部分被处理后不断输出。 同时,用户被重定向到将输出处理过的文本的页面。 我的问题是:在给定PID的情况下,客户端的Javascript如何与服务器上运行的进程通信?可能吗?我是否需要将每个后台进程封装在自己的servlet中,该servlet在自己的端口上运行?它无法访问进程空间。要做到这一点,您需要一个HTTP接口。您可以使用长轮询来完成此操作。服务器可以定期输出文本,客户端
我的问题是:在给定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中建立到远程阵列的连接,并从堆栈中移动一个元素。 轮询将继续,直到堆栈上不再有要添加的元素,也不再有要返回到客户端的元素。 当堆栈为空时,进程终止。 有什么想法吗