Как создать протокол сообщений - PullRequest
0 голосов
/ 14 декабря 2011

Итак, мне нужно создать протокол сообщений, который работает так:

codFunc arg1 arg2...

например:

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

Сейчас я объединяю, чтобы отправить, и использую string.split для чтения, но по нескольким причинам это не лучший способ.

Итак, мой вопрос: каков наилучший способ создания протокола? Какие существующие протоколы мне следует использовать?

Спасибо.

Ответы [ 2 ]

2 голосов
/ 14 декабря 2011

shlex, вероятно, хорошо, сплит имеет проблемы с пробелами в кавычках, рассол небезопасен. JSON это хорошо.

Мне нравится использовать: https://www.google.com/search?gcx=c&ix=c1&sourceid=chrome&ie=UTF-8&q=bufsock ... с данными ASCII, которые заканчиваются нулем или что-то в этом роде, для привязки частей протокола.

Имейте в виду, что не всегда существует отношение один к одному между send () и recv (). Об этом легко успокоиться, но это может вызвать проблемы с надежностью при загрузке сети.

2 голосов
/ 14 декабря 2011

Что неправильно в 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)
...