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

Вернуться   Форум Flasher.ru > Flash > Серверные технологии и Flash

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 01.12.2015, 21:57
faraday вне форума Посмотреть профиль Отправить личное сообщение для faraday Найти все сообщения от faraday
  № 1  
Ответить с цитированием
faraday
 
Аватар для faraday

Регистрация: Apr 2009
Сообщений: 409
По умолчанию WebSocket vs Socket

Всегда использовал стандартный сокет для обмена данными с сервером, и так же всегда интересовал вопрос куда стабильно пропадают 3-5 процентов подключений. Проверялось так: одновременно с подключением к сокету отправлялся http запрос. В итоге около 5 процентов соединений в час числилось пропавшими без вести. Первое что приходит в голову что подключения блокирует фаервол, поэтому решил попробовать подключаться на 80 порт, через webSocket(worlize), в итоге потерянных соединений стало на пару процентов больше. Отсюда вопросы:
Какие дает преимущества использование websocket? почему если он работает через http, его так же не пропускают фаерволы? или через http только рукопожатие, а потом передача обычным сокетом.
Какие еще могут быть причины что http(не 80-й порт) проходит, а сокет нет?
Стоит ли пробовать socket.io? сомневаюсь что он тут чем то поможет
Стоит ли при неудаче подключения на сокет, открывать лонгполинг http?
Или вообще 5 процентов - это нормально и переживать не стоит?

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

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
В итоге около 5 процентов соединений в час числилось пропавшими без вести
Цитата:
Первое что приходит в голову что подключения блокирует фаервол
Это что, такой избирательный фаервол?) Мол, дай-ка я этот пакет пропущу, а этот на таможне придержу
Фаерволл либо блокирует все подключения от программы, либо никаких. Зачем ему блокировать 5% отдельных пакетов? Это же не антивирус, который все пакеты проверяет и опасные блокирует.
Цитата:
Стоит ли при неудаче подключения на сокет, открывать лонгполинг http?
Думаю да. Такая штука есть во многих готовых серверах. Называется http failover

Старый 21.01.2016, 17:29
faraday вне форума Посмотреть профиль Отправить личное сообщение для faraday Найти все сообщения от faraday
  № 3  
Ответить с цитированием
faraday
 
Аватар для faraday

Регистрация: Apr 2009
Сообщений: 409
Цитата:
Сообщение от caseyryan Посмотреть сообщение
Это что, такой избирательный фаервол?) Мол, дай-ка я этот пакет пропущу, а этот на таможне придержу
Фаерволл либо блокирует все подключения от программы, либо никаких. Зачем ему блокировать 5% отдельных пакетов? Это же не антивирус, который все пакеты проверяет и опасные блокирует.
Тем не менее проблема остается и раз за разом воспроизводится.
сервер:
Код AS3:
function socketHandler(socket){
	socket.setEncoding('utf8');
	socket.setTimeout(300000);
	socket.setNoDelay(true);
	socketMsgHandler(socket);
	// socket.write(getCrossDomainFile() + '\0');
}
 
function socketMsgHandler(socket){
	carrier.carry(socket, function(msg){
		if (msg=='<policy-file-request/>'){
			socket.write(getCrossDomainFile()+'\0');
			socket.destroy();
		}
	},'utf8', '\0');
}
клиент:
Код AS3:
			newSocket = new XMLSocket();
			newSocket.connect(host, port);
			Security.loadPolicyFile("xmlsocket://"+host+":"+port);
			newSocket.addEventListener(Event.CONNECT, newConnect);
			newSocket.addEventListener(SecurityErrorEvent.SECURITY_ERROR, secError);
на 8112 порту http сервер
на 8113 порту сокеты
при загрузке отсылаю на http tryConnect, так же, для проверки соединения, спустя 5 сек отсылаю checkConnection.
+ на http логирую результат сокет соединения security, ioError, success.
в итоге на 1000 подключений tryConnect=1000, checkConnection=999, success: 955, security:10. Не понятно откуда взялись эти 10, и куда пропали 34 соединения. при этом до http сервера все достукиваются без проблем.

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

блогер
Регистрация: Dec 2008
Адрес: г. Чебоксары
Сообщений: 2,259
Записей в блоге: 6
Сперва необходимо подписаться на все нужные события и уже потом вызывать .connect(). Мало ли?

Когда клиент запрашивает политики, он всегда шлёт определённую строку по сокету, что-то вроде <police file request/>. Следует дождаться полного её получения, перед тем как слать файл политик.
После этого, на сервере соединение будет разорвано, вами или клиентом. И только потом, флеш клиент устанавливает рабочее соединение. Важно тут то, что для клиента это всё выглядит как одна попытка подключения, в то время как по факту происходит два подключения, первое для политик, второе рабочее.
__________________
Дети не должны знать о своих родителях

Старый 21.01.2016, 18:51
faraday вне форума Посмотреть профиль Отправить личное сообщение для faraday Найти все сообщения от faraday
  № 5  
Ответить с цитированием
faraday
 
Аватар для faraday

Регистрация: Apr 2009
Сообщений: 409
в коде выше все эти моменты отражены. получает полностью <police file request/> (до нулевого байта), потом отвечает политикой и закрывает соединение. вот сам файл политик
Код AS3:
function getCrossDomainFile()
{
     var xml = '<?xml version="1.0"?>\n<!DOCTYPE cross-domain-policy SYSTEM'
     xml += ' "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">';
     xml += '\n<cross-domain-policy>\n';
     xml += '<allow-access-from domain="*" to-ports="*"/>\n';
     xml += '</cross-domain-policy>\n';
 		 return xml;
}
Цитата:
Сперва необходимо подписаться на все нужные события и уже потом вызывать .connect(). Мало ли?
попробую, но врядли это что-то изменит, все хенделры асинхронные. к тому же можно установить подключение прямо из конструктора

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

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

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


 


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


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