我正在构思一个项目的想法,其中客户端GUI可以用Python开发,并且GUI可以通过RPC由潜在的任何其他语言的后端驱动。更具体地说,现在我正在客户端使用PyQt,并使用Go作为初始后端。
这是我的目标:
- PyQt客户端 - 角色:视图,控制器 - 单向调用(SIGNAL/SLOT),例如:
我现在正在查看Thrift,而不是没有IDL的轻量级基本RPC。但是,我的问题主要是是否尝试使用两个.thrift文件来执行Thrift,其中client/server <----> client/server(两个连接),以获得双向功能是否会很混乱?我看到Thrift的好处是IDL,因此我可以特别构建我的接口,并且后端代码只能实现它们想要的部分。
有人对此有解决方案的建议吗?两个Thrift接口?一个Thrift接口,提供服务以让客户端建立第二个简单的套接字以接收来自服务器的单向调用?或者在这里Thrift是否有点过度?虽然后端 -> GUI界面实际上只是单个服务函数,但GUI ->后端可能会扩展一些(modelHandlers,slotHandlers,一般服务器状态查询)。
更多想法:我认为这种模式可以使用任何RPC框架完成,是这样的吗?
- 后端服务器进程启动;侦听端口 - 客户端GUI启动;连接到服务器RPC;侦听新端口;通过RPC调用将端口发送给服务器 - 服务器从客户端接收端口,并将其绑定到第二个RPC连接的端口 - 客户端和服务器具有双向RPC的2个连接
这是我的目标:
- PyQt客户端 - 角色:视图,控制器 - 单向调用(SIGNAL/SLOT),例如:
button.clicked -> RPC.handleSignal
- 请求/响应RPC,例如:rowCount = model.rowCount -> RPC.call.model.rowCount
- 不可知的后端(在本例中为Go)
- 角色:控制器,模型
- 单向调用(发射信号),例如:model.dataChanged -> RPC.emitSignal
我将每个角色称为控制器,因为用户可以在GUI客户端定义信号/槽连接,或者后端可以通过RPC定义自己的信号/槽连接,假设了解客户端上的视图。它完全取决于用户如何设置控制器。我现在正在查看Thrift,而不是没有IDL的轻量级基本RPC。但是,我的问题主要是是否尝试使用两个.thrift文件来执行Thrift,其中client/server <----> client/server(两个连接),以获得双向功能是否会很混乱?我看到Thrift的好处是IDL,因此我可以特别构建我的接口,并且后端代码只能实现它们想要的部分。
有人对此有解决方案的建议吗?两个Thrift接口?一个Thrift接口,提供服务以让客户端建立第二个简单的套接字以接收来自服务器的单向调用?或者在这里Thrift是否有点过度?虽然后端 -> GUI界面实际上只是单个服务函数,但GUI ->后端可能会扩展一些(modelHandlers,slotHandlers,一般服务器状态查询)。
更多想法:我认为这种模式可以使用任何RPC框架完成,是这样的吗?
- 后端服务器进程启动;侦听端口 - 客户端GUI启动;连接到服务器RPC;侦听新端口;通过RPC调用将端口发送给服务器 - 服务器从客户端接收端口,并将其绑定到第二个RPC连接的端口 - 客户端和服务器具有双向RPC的2个连接