多语言跨平台序列化框架Google Protobuf-Python connect Netty
2013-08-26 15:45
956 查看
Python Protobuf模块安装
在[text][https://pypi.python.org/pypi]下载protobuf-2.5.0.tar.gz.注意,该
protobuf-2.5.0.tar.gz和上一节下载的文件名相同,但内容不一样. 上一节下载的是Linux软件库,该文件是一个Python模块.
安装:
tar zxvf protobuf-2.5.0.tar.gz cd protobuf-2.5.0 sudo python setup.py install
安装好Python Protobuf模块后, 就可以进行下一步.
生成command.proto的Python代码
protoc --python_out=./ command.proto
生成的Python文件名为:command_pb2.py, 把
command_pb2.py放入项目空间.
一个简单的Python Socket服务
#!/usr/bin/env python#!encoding:utf-8
import sys
import socket
import time
__author__ = 'zhenqin'
class SocketService():
def __init__(self, host = "localhost", port = 8080):
try:
self.s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.s.connect((host , port))
except socket.error, msg:
print 'Failed to create socket. Error code: ' + str(msg[0]) + ' , Error message : ' + msg[1]
sys.exit()
def send(self, message):
self.s.sendall(message)
def recv(self, buff = 4096):
return self.s.recv(buff)
def __del__(self):
self.s.close()
if __name__ == '__main__':
s = SocketService()
稍微熟悉Python的应该能看的出来, 上面定义了一个Socket Client服务,SocketService类实例化后能和服务端建立连接,通过send发送消息,recv接收消息.
和Netty通信
编写Python, 命名为:protobuf_test.py#!/usr/bin/env python
#!encoding:utf-8
import google.protobuf
import command_pb2
import time
import socketredirect
def testProtoBufSocket():
#建立连接
rpc = socketredirect.SocketService(host = "zhenqin-k45vm", port = 8080)
#构造一个Request实例
tse = command_pb2.RequestCommand()
tse.auth = "aaaaaaaaaaaa"
tse.command = "shutdown"
#向服务器端发送消息
rpc.send(tse.SerializeToString())
print 'Message send successfully'
reply = rpc.recv(4096)
#接收消息后反序列化
test = command_pb2.ResponseCommand()
test.ParseFromString(reply)
#输出
print test.success,test.message
if __name__ == '__main__':
testProtoBufSocket()
程序代码都不难理解. 构造一个简单的Request发送到服务端, 并且接收返回的Response.
运行上一节里的Netty Server程序, 然后运行protobuf_test.py, 可以看到一个完整的通信过程.
Server:
08-26 14:51:28 [INFO] [handler.ProtobufChannelHandler(44)] aaaaaaaaaaaa, shutdown
Client:
Message send successfully True OK
这个过程两边的Bean的序列化和反序列化对程序员都是透明的.这也就是程序员只需要处理业务逻辑,而在两边你都将得到的是一个Bean.
至此, 我已经把Protobuf简单的介绍完了.
相关文章推荐
- 多语言跨平台序列化框架Google Protobuf-with Netty
- Google Protobuf Primer (1) 实现跨平台跨语言的序列化/反序列化
- Google Protobuf - 实现跨平台跨语言的序列化/反序列化
- Google Protobuf——实现跨平台跨语言的序列化/反序列化
- Google Protobuf——实现跨平台跨语言的序列化/反序列化
- Netty编解码框架:Java序列化、Protobuf、 Marshalling
- 每周一荐:Google的序列化框架Protobuf
- Google 开源序列化框架protobuf
- 每周一荐:Google的序列化框架Protobuf
- (原)python中import caffe提示no module named google.protobuf.internal
- Netty 之 Netty使用Google的ProtoBuf
- 高性能序列化工具Google Protobuf的使用
- 【通信框架】Google的开源通信框架protobuf概述
- Netty与Google的protobuf使用
- Netty学习9-序列化框架protocbuf
- netty 的 Google protobuf 开发
- 【通信框架】Google的开源通信框架protobuf概述
- 【深度学习】笔记11:python caffe报错:No module named google.protobuf.internal
- gRPC:Google开源的基于HTTP/2和ProtoBuf的通用RPC框架
- python解决ImportError: No module named google.protobuf