Давайте немного подсчитаем.
Каждые 5 секунд - 720 подключений в час плюс данные.20K / 720 - это около 28 байт полезной нагрузки (ваши данные GPS) для каждого соединения.
IP and TCP headers along are 48 bytes in addition to whatever data is being sent.
3-way handshake connection: 3 packets (2 out, 1 in) == 96 bytes out and 48 bytes in
Outbound Data-packet: 48+28 bytes == 76 bytes (out)
Inbound Ack: 48 bytes (in)
Close: 48 bytes (out)
Final Ack: 48 bytes (in)
Total out per connection: 220
Total in per connection: 144
Total data send/received per connection: 220+144 = 364
Total data usage in one hour = 364 * 720 = 262K
Так что я нахожусь на уровне ваших оценок использования данных.
Если выЧтобы уменьшить использование полосы пропускания, вот три идеи:
Уменьшите частоту обновления.
Не прерывайте сокетное соединение каждыйвремя.Просто держите его открытым.
Учитывая, что ваши GPS-координаты периодически обновляются, вы можете рассмотреть возможность использования UDP вместо TCP.Существует вероятность потери пакетов, но, учитывая, что вы все равно повторно отправляете более свежие данные каждые 5 секунд, потерянное обновление не стоит пропускной способности для повторной передачи.Заголовки IP и UDP объединены только в 28 байтов без дополнительных издержек «соединения».
ОБНОВЛЕНИЕ
Когда я первоначально разместил это сообщение, я ошибочно понялсоединение близко к единственному обмену пакетами FIN между клиентом и сервером.На практике клиент отправляет FIN как часть его, инициируя ЗАКРЫТИЕ.Затем сервер ACKs FIN.Затем сервер отправляет свой собственный FIN, который ACK'd клиентом.Другими словами, дополнительные 96 байтов на соединение.Переделав нашу математику:
Total data send/received per connection =
220+48 + 144+48 = 460
Total data usage in one hour = 460 * 720 = 331K
Таким образом, моя пересмотренная оценка 331KB за один час немного ближе к тому, что видел OP.