|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
01.06.2014, 13:19 | #1 |
Форумчанин
Регистрация: 30.12.2010
Сообщений: 280
|
Задержки при отправке данных по сети TCP.
Здравствуйте.
Есть программа, которая отсылает определённые данные пользователям по сети. Вот цикл рассылки Код:
Работаю с Linux socket по TCP. Правильно ли я понял, что это происходит из-за того, что выполнение цикла останавливается, до тех пор пока данные полностью не отправятся и пока не придёт подтверждение того, что данные дошли до пользователя? Сервер и пользователей запускал на локалхосте и такие задержки, а что же будет при работе с удаленными пользователями. Дайте пожалуйста совет, как быть? Спасибо за внимание. |
01.06.2014, 14:51 | #2 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Цитата:
Создавай отдельные потоки и в них отправляй. Все сервера работают только в отдельных потоках.
I'm learning to live...
|
|
01.06.2014, 17:07 | #3 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,331
|
Есть такие понятия как non-blocking sockets и async I/O.
Кроме того полезно прочитать как работает select() и/или poll() |
09.06.2014, 20:03 | #4 |
Форумчанин
Регистрация: 30.12.2010
Сообщений: 280
|
Спасибо за помощь не блокирующие сокеты помогли. Есть ещё один вопрос. Так как я работаю на локалхосте, а не в интернете, все данные, которые я отправляю по сети доходят до получателя. А при работе в интернете они могут и не дойти, хотя пользователь будет находится в сети. И что тогда произойдёт? Будет ли отправлен ещё один send самостоятельно или нужно сделать что-то типа этого
Код:
Код:
|
09.06.2014, 22:40 | #5 | ||
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Цитата:
Цитата:
I'm learning to live...
|
||
10.06.2014, 19:58 | #6 |
Форумчанин
Регистрация: 30.12.2010
Сообщений: 280
|
Ясно, спасибо. Я надеюсь двух отправок будет достаточно.
|
10.06.2014, 20:15 | #7 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,331
|
В таком случае получатель должен быть готов получать данные дважды.
Кроме того, это прямо таки расхищение трафика. И, наконец, так же ненадежно - как пропали данные один раз, так могут пропасть дважды, просто это будет реже и когда будут баги, связанные с этим, у вас будет сильно болеть голова. |
10.06.2014, 20:44 | #8 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Цитата:
I'm learning to live...
|
|
12.06.2014, 05:13 | #9 |
Форумчанин
Регистрация: 30.12.2010
Сообщений: 280
|
Я то думал что send работающий по TCP, самостоятельно проверяет подтверждение о доставке, и возвращает количество отправленных байт в случае успеха и -1 в случае неудачи. Значит проверку дошли данные до пользователя или не дошли нужно организовывать самостоятельно=(
|
12.06.2014, 09:31 | #10 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,331
|
send() принимает данные в буфер, при наполнении буфера send перестанет принимать данные а буфер очистится, когда/если данные будут доставлены.
Если размер буфера нулевой будет ждать подтверждения на каждый блок данных, все будет медленно работать. Все сказанное выше остается в силе - если данные НЕ дойдут send НЕ будет их пересылать. Гарантию доставки могут дать только специализированные протоколы. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Зависание формы при отправке данных в интернет | NickForm | Общие вопросы Delphi | 4 | 06.12.2011 17:50 |
Потеря части данных при отправке через TSocket | Crystallon | Работа с сетью в Delphi | 7 | 02.10.2011 21:46 |
Ошибка 200 при отправке данных | )Игнат( | Работа с сетью в Delphi | 2 | 15.06.2011 19:43 |
ComboBox проблема при отправке данных | record222 | Общие вопросы Delphi | 1 | 31.03.2010 16:26 |
Формат передаваемых данных хабам локальной сети, при отправке личных сообщений из DC клиетов | docm | Общие вопросы .NET | 0 | 18.11.2008 15:33 |