如何创建消息协议
我需要创建一个消息协议,工作方式是这样的:
codFunc arg1 arg2...
例如:
0 'hello world'
10 'user' 'password'
现在我用拼接的方式来发送消息,然后用 string.split
来读取,但由于几个原因,这并不是最好的方法。
所以我想问,创建这个协议的最佳方法是什么?我应该使用哪些现有的协议?
谢谢。
2 个回答
2
使用split的一个问题是,如果你的用户名里面有空格,它会把这个用户名分成几个部分。
先用一次split来获取正确的函数参数数量:
num, args = s.split(None, 1)
把字符串解析成参数,可能可以用shlex
来实现:
import shlex
argv = shlex.split(args)
去掉两边的引号:
argv = [s.strip(shlex.quotes) for s in argv]
调用你的函数:
myfunc(*argv)
2
shlex这个工具可能不错,但用split的话会在处理带引号的空格时出问题,而pickle则不太安全。JSON是个不错的选择。
我喜欢用:https://www.google.com/search?gcx=c&ix=c1&sourceid=chrome&ie=UTF-8&q=bufsock,适合处理一些以空字符结尾的ASCII数据,来帮助协议的各个部分对齐。
要记住,send()和recv()之间并不总是一一对应。虽然这听起来简单,但在网络负载较大时,这可能会导致一些可靠性问题。