如何创建消息协议

时间:2011-12-13 22:04:06

标签: python web-services protocols

所以我必须创建一个像这样工作的消息协议:

codFunc arg1 arg2...

例如:

0 'hello world'
10 'user' 'password'

现在我连接发送,并使用string.split来阅读,但由于多种原因,这不是最佳方式。

所以我的问题是,创建协议的最佳方法是什么?我应该使用哪些现有协议?

感谢。

2 个答案:

答案 0 :(得分:2)

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)

答案 1 :(得分:2)

shlex可能是好的,分裂有引用空白的问题,pickle是不安全的。 JSON很好。

我喜欢用: https://www.google.com/search?gcx=c&ix=c1&sourceid=chrome&ie=UTF-8&q=bufsock ...使用空终止的ASCII数据或其他东西来锚定协议的一部分。

请记住,send()和recv()之间并不总是一对一的关系。很容易对此感到自满,但它可能会在网络负载下导致可靠性问题。