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客户端
      • 根据上一步生成的客户端调用响应的接口
    
    
  • 相关阅读:
    java编译错误No enclosing instance of type TestFrame is accessible. Must qualify the allocation with an enclosing instance of type TestFrame (e.g. x.new A(
    java 2中创建线程方法
    动态规划基本思想
    关于eclipse编译一个工程多个main函数
    java Gui初识
    Eclipse中java项目的打包
    java 播放声音
    把资源文件夹导入到eclipse中
    Java建立JProgressBar
    How to grant permissions to a custom assembly that is referenced in a report in Reporting Services
  • 原文地址:https://www.cnblogs.com/navysummer/p/9122661.html
Copyright © 2011-2022 走看看