Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
http comet server на libevent, как отследить обрыв канала ?
|
|||
|---|---|---|---|
|
#18+
Исходные данные классический многопоточный http-comet-сервер на libevent те по запросу клиента создается "подписка" на "поток" и данные отправляются клиенту все работает отлично, но в случае обрыва связи - к примеру телефон клиента вне зоны доступа соответственно событие закрытия (и как следствие стандартный каллбек закрытия не вызывается) соединения не формируется и идет накопление данных в памяти вопрос - как отследить это событие ? смотрел на total_len в структуре (struct evbuffer) но там 0 в любом случае ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2017, 15:32 |
|
||
|
http comet server на libevent, как отследить обрыв канала ?
|
|||
|---|---|---|---|
|
#18+
гугли SO_KEEPALIVE ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2017, 15:36 |
|
||
|
http comet server на libevent, как отследить обрыв канала ?
|
|||
|---|---|---|---|
|
#18+
однако способ был найден и не по пути SO_KEEPALIVE в libevent таки есть способ отследить состояние буфера ! Код: plaintext 1. где blen - размер в байтах req - исходный запрос для доступа к функциям надо подключить Код: plaintext 1. соответственно в таймере-обработчике перед отправкой нового пакета данных надо просто проверить пуст ли буфер ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2017, 07:33 |
|
||
|
http comet server на libevent, как отследить обрыв канала ?
|
|||
|---|---|---|---|
|
#18+
nagisaнадо просто проверить пуст ли буфер вообще-то нет. у тебя клиент - мобильный телефон, он 100% сидит за каким-нибудь NAT, который соорудил ОПСОС. опсосу не выгодно держать у себя 100500 померших потоков, потому он наверняка просто молча дропает коннекшины в NAT таблице, не всегда уведомляя стороны об этом, что или на клиенте вешает сокет в ожидание, или на сервере, или вообще на обеих концах. а может и не дропает, или вообще ведет себя как ему захочется - там ведь все заточено под нормальный HTTP трафик, а не под long пулинг потому единственный способ обеспечить нормальную жизнь приложению - это выставлять keepalive, причем на обеих сторонах. иначе сервер у тебя может и что-то там себе соптимизирует, а вот клиент будет ждать свой запрос часами ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2017, 18:44 |
|
||
|
http comet server на libevent, как отследить обрыв канала ?
|
|||
|---|---|---|---|
|
#18+
dbpatch, все верно и это уже учтено, был единственный вопрос по буферу на сервере, который теперь тоже закрыт ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2017, 08:31 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=39550658&tid=2018045]: |
0ms |
get settings: |
9ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
162ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
48ms |
get tp. blocked users: |
2ms |
| others: | 271ms |
| total: | 531ms |

| 0 / 0 |
