Я разрабатываю приложение для синхронизации файлов (например, DropBox). Клиент поддерживает постоянный TCP-сокет Secure (SSL) с сервером на порту 443. Всякий раз, когда файл создается, изменяется/удаляется на клиенте, пакет, содержащий соответствующие данные, отправляется через сокет на сервер, который обрабатывает его до обновите файл на сервере. Аналогично, когда что-то меняется на сервере, он отправляет соответствующие данные клиенту, который затем обновляет локальную копию.Рекомендации по программированию сокетов?
Это прекрасно работает, когда сервер находится на локальном компьютере или в локальной локальной сети. Меня беспокоит, когда клиент находится в ненадежной сети. Итак, мой вопрос в том, каковы лучшие практики, которые следует учитывать при разработке такого приложения?
Например, скажем, когда файл создается на Клиенте, должен ли клиент просто отправлять данные на сервер и забывать об этом, или он должен ждать подтверждения с сервера в течение определенного периода времени, которые отправляют данные снова? И какое признание?
О, это хорошо.Поэтому мне не нужно беспокоиться о потерянных пакетах. Но я думаю, мне все равно придется отправлять подтверждения в прикладном уровне как «nos», упомянутые в комментарии к приведенному ниже ответу. –
Так что мое приложение просто продолжает толкать данные в сокет, не беспокоясь ни о чем. Например, скажем, клиент должен отправить файл на 10 ГБ на сервер, а соединения очень медленные. Должно ли приложение просто записывать данные в выходной буфер? Если сеть медленная, не переполнение буфера? –
Если вы используете что-то вроде [sendfile (2)] (http://linux.die.net/man/2/sendfile), он вернет количество байтов, которое ему удалось записать. Затем вы можете опросить FD для готовности к записи и попробовать написать еще несколько. –