远程过程调用(RPC)与图形用户界面(GUI)开发
1. 远程过程调用(RPC)概述
远程过程调用(RPC)的核心思想是在另一个进程空间中透明地调用子程序,使其表现得就像在本地进程中调用一样。RPC 模块在设计时考虑了以下几个普通子程序调用时的特性:
- 同步性 :调用者会等待被调用的过程完成。RPC 模块通过调用 Msg::send_now
和 Msg::rcv_now
来实现这种阻塞行为。
- 参数处理 :Perl 子程序可以接受任意数量和类型的参数。RPC 模块使用 FreezeThaw
模块来处理参数,将所有参数扁平化并编码为一个字符串(冻结),在接收端再恢复(解冻)。不过, FreezeThaw
和 RPC 目前不支持代码引用。
- 上下文处理 :子程序可以使用 wantarray
来判断调用者指定的是列表还是标量上下文,RPC 模块确保这种上下文的透明性。此外,调用者的包信息也会被正确处理。
- 异常处理 :子程序可以调用 die
抛出异常,RPC 的接收端会在 eval
中调用目标子程序,如果发生异常,会将错误信息发送回调用进程。
- 相互递归 :子程序 A 可以调用子程序 B,而 B 又可以调用 A,RPC 支持这种相互递归,因为它可以在发送消息阻塞时处理传入的