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
[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)
|