Показать сообщение отдельно
Старый 14.10.2013, 16:49
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 6  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
А как вы узнаете о том, что на сокет поступили данные от клиента? Для того, чтобы не бегать по всем подключениям подряд используют select или poll в зависимости от языка
Похоже мы друг друга не понимаем малость.

Допустим клиент коннектится к серверу, при этом создается новый объект Client, через который и происходит все общение с flash клиентом.
Он начинает через 900 милисекунд слать этому клиенту сообщение _hb (в независимости от того, шлются какие-то другие сообщения или нет). При отправке _hb сообщения, фиксируется время его отправки. С этого момента начинается ожидание ответа клиента. Если в течение 6000 милисекунд клиент ничего не ответил, соединение считается дохлым. Все ридеры и райтеры глушатся, и отправляется событие дисконнекта. Менеджер клиентов его получает, и сносит target клиент из общего списка. Таким образом в списке всегда только живые сокеты.
Цитата:
Хотелось бы получить проблемный сокет в селекте, но видимо это невозможно.
Точно так же по событию DISCONNECTED можно его в список проблемных затолкать. Только зачем?