Как должен выглядеть протокол на основе сокетов для демона C? - PullRequest
0 голосов
/ 05 января 2011

Я пишу демон C, который мое веб-приложение будет использовать в качестве прокси для связи с FTP-серверами. Мое веб-приложение позволяет пользователям подключаться и взаимодействовать с FTP-сайтами через AJAX. Причина, по которой мне нужен демон C, заключается в том, что я не могу поддерживать FTP-соединения живыми через вызовы AJAX.

Мое веб-приложение должно быть в состоянии указать моему демону делать список, получать, помещать, удалять, перемещать и переименовывать файлы на указанный FTP-сервер для данной учетной записи пользователя. Поэтому, когда мое приложение обращается к демону, оно должно передать следующее через некоторый протокол, который я определил: 1) действие, 2) идентификатор соединения, 3) идентификатор пользователя, 4) любые дополнительные параметры для действия (примечание: информация о соединении хранится в база данных, так что демон тоже с этим поговорит).

Так вот, что мне нужно, чтобы мой демон сделал. Я думаю, что связь между моим веб-приложением и демоном будет происходить через сокет TCP, но я точно не знаю, какие данные я отправлю. Мне нужен пример. Например, я должен просто отправить что-то подобное через сокет демону?

action=list&connection_id=345&user_id=12345&path=/some/path

или я должен сделать что-то хардкорное на уровне байтов, как это?

+-----------------+-------------------------+-------------------+-----------------------------------+
| 1 byte (action) | 4 bytes (connection id) | 4 bytes (user id) | 255 bytes (additional parameters) |
+-----------------+-------------------------+-------------------+-----------------------------------+
| 0x000001        | 345                     | 12345             | /some/path                        |
+-----------------+-------------------------+-------------------+-----------------------------------+

Как обычно выглядит такая связь через сокет?

Ответы [ 3 ]

1 голос
/ 05 января 2011

На самом деле речь идет в основном о том, какой формат вам удобнее кодировать и анализировать, поэтому вместо того, чтобы заново изобретать колесо с моим собственным протоколом, я лично выбрал бы существующее решение для удаленного вызова процедур.Мой второй выбор - битовые поля, так как их легко упаковать в структуру и из нее.

1 голос
/ 05 января 2011

Вам не обязательно реализовывать собственный протокол.Задумывались ли вы об использовании чего-то вроде XML-RPC или даже простого XML?Есть библиотеки C, которые должны позволить вам разобрать его.

1 голос
/ 05 января 2011

С бинарными протоколами работать немного проще.Просто добавьте длину сообщения (или только его переменную часть) - TCP не знает о границах сообщений вашего уровня приложения.Обратите внимание на число порядковый номер .

С другой стороны, текстовые протоколы более гибкие.

Также обратите внимание на Буферы протокола Google - может быть очень полезно, хотя я не уверен, что ajax поддерживается.

...