Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 05.10.2014, 01:32
inozemcev вне форума Посмотреть профиль Отправить личное сообщение для inozemcev Найти все сообщения от inozemcev
  № 1  
Ответить с цитированием
inozemcev
[+ 1.0 08.10.14]
 
Аватар для inozemcev

блогер
Регистрация: Mar 2010
Адрес: x = stage.stageWidth/2 y= stage.stageHeight/2
Сообщений: 293
Записей в блоге: 2
По умолчанию обрыв сокетного соединения

Решил использовать в проекте сокеты. Пока не стал использовать бинарный протокол, нашел библиотеку которая реализует стандартное апи вебсокета (com.worlize.websocket.WebSocket)

Все было в порядке, но вот сейчас вдруг стало обрываться соединение. Основная проблема в том, что даже не срабатывают события close, fail. Библиотека работает с нативными сокетами. Вполне возможно, что у сокетов события срабатывают, и что-то не так с библиотекой. На сервере событие close фиксируется. (там у меня питоновский tornado с websockethandler).

Вопрос собственно такой если по каким-то причинам обрывается соединение (в моем конкретно случае я подозреваю что соединение обрывает линукс из-за недостаточного количества свободной памяти) то должен ли родной (нативный) сокет обязательно продиспачить события, или могут быть ситуации когда он может незаметить разъединения и не выкинуть никаких событий.

Старый 05.10.2014, 01:47
Nooob вне форума Посмотреть профиль Отправить личное сообщение для Nooob Найти все сообщения от Nooob
  № 2  
Ответить с цитированием
Nooob
 
Аватар для Nooob

Регистрация: Mar 2007
Сообщений: 319
проверь сам, установи соединение и выдерни шнур.
по tcp факт обрыва соединения фиксируется когда отправляется пакет и только на той стороне, которая этот пакет отправляет.
если ты открыл сокет и ничего не отправляешь то и обрыва ты не увидишь. если может возникнуть такая ситуация нужно раз в минуту (или чаще) отправлять что то серверу и клиенту,

Старый 05.10.2014, 08:04
inozemcev вне форума Посмотреть профиль Отправить личное сообщение для inozemcev Найти все сообщения от inozemcev
  № 3  
Ответить с цитированием
inozemcev
[+ 1.0 08.10.14]
 
Аватар для inozemcev

блогер
Регистрация: Mar 2010
Адрес: x = stage.stageWidth/2 y= stage.stageHeight/2
Сообщений: 293
Записей в блоге: 2
стал каждые пять секунд проверять соединение тестовым сообщением и разрывы прекратились, но теперь не знаю как эту ошибку снова ловить, нужно написать обработку разрыва соединения. Если я на сервере буду в рандомное время обрывать соединение, это будет идентично естественному разрыву? Просто если закрыть соединение на сервере, то клиент обрабатывает событие onclose и меняет статус сокета, поэтому вробе бы это не совсем одно и то же.

Старый 05.10.2014, 09:52
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 4  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
стал каждые пять секунд проверять соединение тестовым сообщением и разрывы прекратились
Вообще, такой способ используется сплошь и рядом. Это называется heartbeat.
Что-то мне подсказывает, что дело все в банальном таймауте соединения. Нет смысла держать соединение постоянно, если сокету ничего не отправляется. Так что для начала надо посмотреть настройки этих библиотек. Наверняка там есть таймаут по умолчанию
__________________
Ко мне можно и нужно обращаться на ты)

Старый 05.10.2014, 13:14
inozemcev вне форума Посмотреть профиль Отправить личное сообщение для inozemcev Найти все сообщения от inozemcev
  № 5  
Ответить с цитированием
inozemcev
[+ 1.0 08.10.14]
 
Аватар для inozemcev

блогер
Регистрация: Mar 2010
Адрес: x = stage.stageWidth/2 y= stage.stageHeight/2
Сообщений: 293
Записей в блоге: 2
Там достаточно короткие пятиминутные матчи, предполагается что игрок будет тратить примерно секунд по десять на обдумывание хода, так что наверное лучше держать постоянное соединение.

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

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
так что наверное лучше держать постоянное соединение.
Я говорю не об этом. Создатели этих библиотек явно не думали о чьих-то конкретных задачах, а делали все универсально. В общем случае, постоянное соединение не требуется. Представим, что у клиента просто отвалился интернет или он вырубил комп не нажимая кнопки выход из приложения. Так зачем сервер будет сам себя нагружать, не убивая это "ненужное" соединение. Не получая от клиента никаких откликов, он его сам рубанет через какое-то время, что вполне логично и правильно. Так что "сердцебиение" здесь наиболее правильный подход. Клиент как-то должен сообщать серверу, что он еще на связи
__________________
Ко мне можно и нужно обращаться на ты)

Создать новую тему Ответ Часовой пояс GMT +4, время: 02:45.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 02:45.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.