Рекомендации по программированию сокетов? - PullRequest
2 голосов
/ 01 февраля 2012

Я разрабатываю приложение для синхронизации файлов (например, DropBox).Клиент сохраняет постоянный сокет Secure (SSL) TCP с сервером на порту 443. Всякий раз, когда файл создается / изменяется / удаляется на клиенте, пакет, содержащий соответствующие данные, отправляется через сокет на сервер, который обрабатывает его дляобновить файл на сервере.Аналогичным образом, когда что-то меняется на сервере, он отправляет соответствующие данные клиенту, который затем обновляет локальную копию.

Это работает абсолютно нормально, когда сервер находится на локальном компьютере или в локальной сети.Что меня беспокоит, так это когда клиент находится в ненадежной сети. Таким образом, мой вопрос заключается в том, какие передовые практики следует учитывать при разработке такого приложения?

Например, например, когда файл создается на клиенте, если клиент просто отправитданные на сервер и забыть об этом, или он должен ждать подтверждения от сервера в течение определенного периода времени, в противном случае отправка данных снова?А что за подтверждение?

Ответы [ 3 ]

5 голосов
/ 01 февраля 2012

TCP устраняет многие сетевые проблемы: пакеты всегда поступают в порядке и отправляются повторно, если сервер не подтверждает, что получил пакет.Ненадежная сеть приведет к замедлению трафика, так как пакеты должны быть повторно отправлены.

Если соединение в любом случае потеряно, ваши вызовы read () и write () возвратят возвращаемые значения ошибок, поэтому вам придется обрабатыватьчто.

0 голосов
/ 01 февраля 2012

Вы должны использовать подтверждение, даже если сервер является локальным. Представьте, что при отправке информации возникает проблема с подключением Вам нужен какой-то способ узнать результат операции (например, с помощью системы подтверждения).

Я бы использовал что-то более сложное, чем простой ответ ACK / NACK. Например, если вы измените некоторые файлы на клиенте, после отправки информации с клиента на сервер, сервер должен ответить на число (или список с именем) файлов, затронутых операцией обновления. Таким образом, клиент может проверить, что все прошло нормально, или действовать в результате.

0 голосов
/ 01 февраля 2012

Клиент поддерживает постоянный сокет Secure (SSL) TCP с сервером

[..]

, если клиент просто отправит данные на сервер и забудет об этомили он должен ждать подтверждения от сервера в течение определенного периода времени, при неудаче которого данные отправляются снова?

Если бы вы использовали UDP, вам бы пришлось это сделать.Но так как вы используете TCP, это уже сделано для вас.

http://en.wikipedia.org/wiki/Transmission_Control_Protocol

Вы должны знать, что TCP является потоковым протоколом, поэтому ваши данные могут не поступать так жеспособ отправки (т. е. он может поступать по одному байту за раз или все сразу).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...