При необходимости можно повысить надежность доставки каждого исходящего сообщения передавая его повторно до тех пор, пока не будет получено подтверждение о его получении от сервера. В подпрограмме do_login () проиллюстрирован простой способ решения такой задачи. Безусловно, в результате повышается риск отправки серверу дубликатов сообщения, если первоначальное сообщение было доставлено, а подтверждение потеряно при передаче. Однако дублирующиеся сообщения для сервера не имеют никакого значения, поскольку повторное выполнение таких действий, как присоединение к каналу, не влечет за собой никаких отрицательных последствий.
Модуль ChatObjects::Comm
Теперь рассмотрим модуль ChatObjects::Соmm. Он представляет собой оболочку для сокета UDP, которая обеспечивает возможность кодирования и декодирования сообщений системы интерактивной переписки.
Строки 19-29. Отправка сообщения о событии. Метод send_event () может использоваться клиентом для отправки команды на сервер, или сервером — для отправки клиенту кода события. Этот метод принимает три параметра, содержащие код события, данные события и адрес назначения. В этой подпрограмме вызывается функция pack () для упаковки кода события и данных в двоичный формат, используемый в этом протоколе, а затем выполняется отправка данных в сокет с помощью функции send () . Если задан адрес назначения, то используется функция send () с четырмя параметрами. В ином случае предполагается, что в сокете с помощью функции connect () был установлен адрес назначения, применяемый по умолчанию, и вызывается функция send () с тремя параметрами.