zoukankan      html  css  js  c++  java
  • tkang's blog

    Tuesday, July 13, 2010

    Thrift Server-Client in Python

    1. Write Thrift stub code

    [tkang@neb005 thrift]$ vi helloworld.thrift

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    const string HELLO_IN_KOREAN = "an-nyoung-ha-se-yo"
    const string HELLO_IN_FRENCH = "bonjour!"
    const string HELLO_IN_JAPANESE = "konichiwa!"
     
    service HelloWorld {
      void ping(),
      i32 sayHello(),
      i32 sayMsg(1:string msg)
    }



    2. Generate python code

    [tkang@neb005 thrift]$ thrift --gen py helloworld.thrift

    Generated codes will be saved under "gen-py" directory.

    [tkang@neb005 thrift]$ ls
    gen-py helloworld.thrift

    3. Fill in Server code

    [tkang@neb005 thrift]$ mkdir py-impl
    [tkang@neb005 thrift]$ cd py-impl
    [tkang@neb005 py-impl]$ vi PythonServer.py

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    #!/usr/bin/env python
     
    import sys
    sys.path.append('../gen-py')
     
    from helloworld import HelloWorld
    from helloworld.ttypes import *
     
    from thrift.transport import TSocket
    from thrift.transport import TTransport
    from thrift.protocol import TBinaryProtocol
    from thrift.server import TServer
     
    import socket
     
    class HelloWorldHandler:
      def __init__(self):
        self.log = {}
     
      def ping(self):
        print "ping()"
     
      def sayHello(self):
        print "sayHello()"
        return "say hello from " + socket.gethostbyname(socket.gethostname())
     
      def sayMsg(self, msg):
        print "sayMsg(" + msg + ")"
        return "say " + msg + " from " + socket.gethostbyname(socket.gethostname())
     
    handler = HelloWorldHandler()
    processor = HelloWorld.Processor(handler)
    transport = TSocket.TServerSocket(30303)
    tfactory = TTransport.TBufferedTransportFactory()
    pfactory = TBinaryProtocol.TBinaryProtocolFactory()
     
    server = TServer.TSimpleServer(processor, transport, tfactory, pfactory)
     
    print "Starting python server..."
    server.serve()
    print "done!"



    4. Write Client code to connect to server

    [tkang@neb005 py-impl]$ vi PythonClient.py

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    #!/usr/bin/env python
     
    import sys
    sys.path.append('../gen-py')
     
    from helloworld import HelloWorld
    from helloworld.ttypes import *
    from helloworld.constants import *
     
    from thrift import Thrift
    from thrift.transport import TSocket
    from thrift.transport import TTransport
    from thrift.protocol import TBinaryProtocol
     
    try:
      # Make socket
      transport = TSocket.TSocket('localhost', 30303)
     
      # Buffering is critical. Raw sockets are very slow
      transport = TTransport.TBufferedTransport(transport)
     
      # Wrap in a protocol
      protocol = TBinaryProtocol.TBinaryProtocol(transport)
     
      # Create a client to use the protocol encoder
      client = HelloWorld.Client(protocol)
     
      # Connect!
      transport.open()
     
      client.ping()
      print "ping()"
     
      msg = client.sayHello()
      print msg
      msg = client.sayMsg(HELLO_IN_KOREAN)
      print msg
     
      transport.close()
     
    except Thrift.TException, tx:
      print "%s" % (tx.message)
  • 相关阅读:
    [转] Java 基础
    IDEA 入门
    如何将本地的一个新项目上传到GitHub上新建的仓库中去
    多线程学习
    Java泛型中E、T、K、V等的含义
    数据结构
    5W1H
    mysql语句sum求和为null的问题
    java 开发体系参考学习
    linux下发邮件
  • 原文地址:https://www.cnblogs.com/lexus/p/2778312.html
Copyright © 2011-2022 走看看