如何创建消息协议

0 投票
2 回答
1432 浏览
提问于 2025-04-17 08:20

我需要创建一个消息协议,工作方式是这样的:

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()之间并不总是一一对应。虽然这听起来简单,但在网络负载较大时,这可能会导致一些可靠性问题。

撰写回答