Thrift介绍以及Java中使用Thrift实现RPC示例

266 篇文章 27 订阅 ¥19.90 ¥99.00
163 篇文章 4 订阅 ¥15.90 ¥99.00

场景

Thrift

Thrift最初由Facebook研发,主要用于各个服务之间的RPC通信,支持跨语言,常用的语言比如C++, Java, Python,PHP, Ruby, Erlang,Perl,Haskell, C#, Cocoa, JavaScript, Node.js, Smalltalk, and OCaml都支持。

Thrift是一个典型的CS(客户端/服务端)结构,客户端和服务端可以使用不同的语言开发。既然客户端和服务端能使用不同的语言开发,那么一定就要有一种中间语言来关联客户端和服务端的语言,这种语言就是IDL (Interface Description Language)。

RPC

RPC, 远程过程调用,直观说法就是A通过网络调用B的过程方法。

简单的说,RPC就是从一台机器(客户端)上通过参数传递的方式调用另一台机器(服务器)上的一个函数或方法(可以统称为服务)并得到返回的结果。

RPC 会隐藏底层的通讯细节(不需要直接处理Socket通讯或Http通讯) RPC 是一个请求响应模型。

客户端发起请求,服务器返回响应(类似于Http的工作方式) RPC 在使用形式上像调用本地函数(或方法)一样去调用远程的函数(或方法)。

注:<

(self.model.predict(next_state[np.newaxis])) target_f = self.model.predict(state[np.newaxis]) target_f[0][np.argmax(action)] = target self.model.fit(state[np.newaxis], target_f, epochs=1, verbose=0) state = next_stateJavaRPC(远程过程调用)可以通过使用Java RMI或Apache Thrift框架来实现。这里 total_reward += reward self.epsilon = max(self.epsilon_min, self.epsilon * self.epsilon_decay) print('Episode {}:提供一个简单的Java RMI示例: 1. 定义接口 ``` public interface MyService extends Remote { total reward = {}, epsilon = {}'.format(episode, total_reward, self.epsilon)) if save_path is not None: self.model public String sayHello(String name) throws RemoteException; } ``` 2. 实现接口 ``` public class MyServiceImpl extends Unicast.save(save_path) def predict(self, state): return self.model.predict(state[np.newaxis])[0] ``` 在上面的RemoteObject implements MyService { public MyServiceImpl() throws RemoteException { super(); } public String sayHello(String name) throws代码,我们定义了一个强化学习代理类StocksAgent,该类用于训练和保存模型。 RemoteException { return "Hello " + name; } } ``` 3. 启动服务 ``` public class Server { public在初始化方法,我们传入股票环境和模型等参数,并定义了一个神经网络模型,用于 static void main(String[] args) throws RemoteException, MalformedURLException { MyService service = new MyServiceImpl(); Naming.rebind("r估计动作的价值。在act方法,我们根据当前状态选择动作,有一定的随机性mi://localhost:1099/MyService", service); System.out.println("Server started"); } } ``` 4. 客户,即以epsilon的概率随机选择动作。在train方法,我们训练模型,并记录每个episode的端调用 ``` public class Client { public static void main(String[] args) throws RemoteException, NotBoundException, MalformedURLException { MyService service = (MyService) Naming.lookup("rmi://localhost:1099/MyService"); String result = service总奖励和当前epsilon值。在predict方法,我们根据当前状态预测动作的价值。 最后,.sayHello("World"); System.out.println(result); } } ``` 这个示例演示了如何使用Java RMI我们定义一个主函数,用于实例化股票环境和强化学习代理,并训练模型: ```框架实现RPC。当客户端调用远程方法时,底层框架会自动处理网络通信和python if __name__ == '__main__': stock_codes = ['sh600000', 'sh600519', 'sh601318',序列化等问题,使得远程调用看起来像是本地调用一样简单。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

霸道流氓气质

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值