Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/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
F# 在远程MailboxProcessor之间传递消息?_F#_Messaging_Agent_Mailboxprocessor - Fatal编程技术网

F# 在远程MailboxProcessor之间传递消息?

F# 在远程MailboxProcessor之间传递消息?,f#,messaging,agent,mailboxprocessor,F#,Messaging,Agent,Mailboxprocessor,我使用MailboxProcessor类来保持独立的代理完成自己的任务。通常,代理可以在同一进程中彼此通信,但我希望代理在不同进程甚至不同机器上时彼此通信。什么样的机制最适合实现它们之间的通信?有标准溶液吗 请注意,我正在使用Ubuntu实例来运行代理。我认为您需要编写自己的例程来序列化消息,将它们跨进程边界传递,然后在另一端分派它们。这还需要实现一个ID系统,其中每个邮箱都有一个ID,进程可以将消息发送到ID,而不仅仅是mailbox.send。这并不容易,因为本地邮箱可以访问本地内存,而远程

我使用
MailboxProcessor
类来保持独立的代理完成自己的任务。通常,代理可以在同一进程中彼此通信,但我希望代理在不同进程甚至不同机器上时彼此通信。什么样的机制最适合实现它们之间的通信?有标准溶液吗


请注意,我正在使用Ubuntu实例来运行代理。

我认为您需要编写自己的例程来序列化消息,将它们跨进程边界传递,然后在另一端分派它们。这还需要实现一个ID系统,其中每个邮箱都有一个ID,进程可以将消息发送到ID,而不仅仅是mailbox.send。这并不容易,因为本地邮箱可以访问本地内存,而远程邮箱则不能

我会看一些像RPyC的东西(http://rpyc.wikidot.com/)因为它提供了一个有点像您正在寻找的协议


基本上,答案是“不”,这并不是一个好办法。

谁把这个选为“离题”?如果你不明白这个问题,请不要干涉。可以提供一些见解。可以查看windows azure队列。这就是他们用来让不同的机器(他们称之为工作者角色)相互对话的方式。您可以做的是在每台机器上都有一个代理,负责和其他机器进行通信,以请求工作、通知工作完成等。@jlezard很有趣,但我不使用Azure。我已经发现我需要建立自己的排队基础设施,你知道在其他有代理的语言:Erlang、Scala和co中这将如何进行吗?谢谢在Erlang中,您没有共享内存。每个“线程”实际上是一个单独的进程。所以当你说
pid!“foo”
pid只是一个进程的id,它被发送到
“foo”
。由于没有共享内存,并且进程已经有了pid,因此联网非常简单,只需创建pid到IP映射的字典并基于该信息传递消息即可。这种方法的问题是,所有通信都必须通过消息传递完成,目前还涉及消息的内存副本。就性能而言,这并不总是最好的。我对Scala没有任何经验。我应该澄清,Erlang进程不是OS进程,而是VM进程。Erlang进程的内存开销为几百字节。操作系统进程的开销在多KB范围内。