这就要借助一下PHP的魔术函数了, __call() 这个函数是一个类调用不存在的方法时会跑到这里来, 所以, 我们返回一个类, 在call方法中进行远程调用, 这样, 在本地看来就只是在调用一个方法....在刚才使用PHP简单实现中, 已经发现了. 需要解决的问题如下:
网络通信
信息格式
对象状态保存
1.网络通信
说到底, 网络通信不过两种: tcp udp.
有没有使用udp实现的RPC呢?...当然, 如果需要频繁调用, 可以不断开tcp连接, 在一段时间内一直保持连接, 避免频繁握手.
2.信息格式
信息格式就有很多选择了, json、xml等等, 也可以自己定制, 只要发送端和接收端统一信息格式就行了...过程
个人理解的RPC调用过程:
客户端创建RPC对象
客户端调用方法
RPC解析方法并将对象及参数做序列化
RPC通过网络连接发送方法调用
服务端接收到方法调用, 解析对象及参数反序列化
服务端执行方法并将结果序列化返回...客户端接收到结果并进行解析, 返回给本地调用者
拿到最终结果
RPC适用于内部网络不同项目之间的通信, 如果是对外暴露的, 个人感觉还是通过接口的形式吧.