zoukankan      html  css  js  c++  java
  • Thriftpy一个简单的例子

    • sleep.thrift文件(什么是thrift文件?),文件内容如下,该文件定义了一个Sleep服务,该服务提供一个sleep方法,sleep方法接受一个32位int类型的参数且没有返回值
    service Sleep {
        // oneway表示该方法没有任何返回值,返回值类型必须为void
        // 客户端调用后不等待服务器响应,直接返回
        // 服务器端收到请求,执行相关业务逻辑后,不返回任何返回值
        oneway void sleep(1: i32 seconds)
    }
    • sleep_server.py文件,文件内容如下
    # -*- coding: utf-8 -*-
    import time
    import thriftpy
    from thriftpy.rpc import make_server
    
    # 根据sleep.thrift文件,在内存中动态构建一个名为"sleep_thriftpy"的module
    # 该module中包含了名为Sleep的一个object
    sleep_thrift = thriftpy.load("sleep.thrift", module_name="sleep_thrift")
    
    # 官方代码中该Class名称为Dispatcher
    # 修改为Sleep只是为了方便读者和sleep.thrift文件中的Sleep服务相对应
    class Sleep(object):
        # 该方法对应sleep.thrift文件中的oneway void sleep(1: i32 seconds)
        def sleep(self, seconds):
            print("I'm going to sleep %d seconds" % seconds)
            time.sleep(seconds)
            print("Sleep over!")
    
    def main():
        # 创建一个服务,在127.0.0.1的6000端口进行监听
        # 将class Sleep和module sleep_thrift中名为Sleep的Object绑定
        server = make_server(sleep_thrift.Sleep, Sleep(),
                             '127.0.0.1', 6000)
        print("serving...")
        # 启动服务
        server.serve()
    
    if __name__ == '__main__':
        main()
    • sleep_client.py文件,文件内容如下
    # -*- coding: utf-8 -*-
    import thriftpy
    from thriftpy.rpc import make_client
    
    # 根据sleep.thrift文件,动态生成一个名为"sleep_thriftpy"的module
    # 该module中包含了名为Sleep的一个object
    sleep_thrift = thriftpy.load("sleep.thrift", module_name="sleep_thrift")
    
    def main():
        # 创建一个客户端,该客户端连接127.0.0.1的6000端口
        # 并将该客户端和服务器端的Sleep服务进行绑定
        client = make_client(sleep_thrift.Sleep, '127.0.0.1', 6000)
        # 绑定完成后即可直接调用服务器端相应的方法
        client.sleep(1)
    
    if __name__ == '__main__':
        main()

    运行结果

    • 执行sleep_server.py,输出如下信息

    serving…

    执行sleep_client.py,server端输出如下

    I’m going to sleep 1 seconds 
    Sleep over!

    小结

    • thrift文件通过一种中立的方式描述了服务器和客户端之间通信的接口(Thriftpy创建服务器和客户端都需要对该文件进行解析),使得使用不同语言的客户端和服务器之间可以进行透明的通信

    • 开发人员使用Thriftpy编写服务器/客户端可以不用关心接口调用实现的细节,更加专注于业务功能的开发

    • 使用Thriftpy创建一个Thrift服务器只需要以下三步即可完成

      • 调用thriftpy.load方法对thrift文件进行解析,在内存中构建对应的module
      • 调用make_server将上一步构建的module和完成具体业务功能的class绑定,同时完成传输层和协议层的设置,生成thrift服务器端
      • 调用server.serve方法启动服务器
    • 使用Thriftpy创建一个thrift客户端接口只需要以下三步即可完成

      • 调用thriftpy.load方法对thrift文件进行解析,在内存中构建对应的module
      • 根据上一步的解析结果,调用make_client绑定上一步构建的module,同时完成传输层和协议层的设置,生成Thirft客户端
      • 根据上一步生成的客户端调用响应的接口
    
    
  • 相关阅读:
    〖Linux〗Kubuntu设置打开应用时就只在打开时的工作区显示
    〖Linux〗Kubuntu, the application 'Google Chrome' has requested to open the wallet 'kdewallet'解决方法
    unity, dll is not allowed to be included or could not be found
    android check box 自定义图片
    unity, ios skin crash
    unity, Collider2D.bounds的一个坑
    unity, ContentSizeFitter立即生效
    类里的通用成员函数应声明为static
    unity, Gizmos.DrawMesh一个坑
    直线切割凹多边形
  • 原文地址:https://www.cnblogs.com/navysummer/p/9122661.html
Copyright © 2011-2022 走看看