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

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

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

Регистрация: May 2008
Сообщений: 102
По умолчанию Socket, склеенные пакеты

код для сокета использую из мануала - http://www.adobe.com/livedocs/flash/...xamplesSummary

при коннекте с серваком, последний сразу шлет клиенту 10 одинаковых пакетов.
А вот функция на событие SOCKET_DATA срабатывает только 2 раза - словно приходит 2 пакета.

Вот первый:
Код:
[ProgressEvent type="socketData" bubbles=false cancelable=false eventPhase=2 bytesLoaded=12 bytesTotal=0]
Вот второй:
Код:
[ProgressEvent type="socketData" bubbles=false cancelable=false eventPhase=2 bytesLoaded=108 bytesTotal=0]
почему так сильно размеры отличаются? такое чувство, что оставшиеся 9 (12*9=108 байт) пакетов пришли как один...

Если сервер отправляет пакеты с некоторой задержкой - все ок. Если вот сразу кучей - вот такие проблемы.

Надо ставить микроскопическую задержку или какой-то разделитель? null например?

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

блогер
Регистрация: Mar 2008
Адрес: РФ, Санкт-Петербург
Сообщений: 2,272
Записей в блоге: 5
Отправить сообщение для gloomyBrain с помощью ICQ Отправить сообщение для gloomyBrain с помощью Skype™
А Вы flush на сервере после каждого сообщения вызываете?
__________________
...вселенская грусть

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

Регистрация: Jul 2008
Адрес: Украина, Херсон
Сообщений: 635
Отправить сообщение для Division с помощью ICQ
В TCP/IP нет понятия пакета - это потоковый протокол. Пришло все как один вероятно из-за включенного алгоритма нейгла. Все что посылается может приходить абсолютно любыми порциями.
Так что отделять пакеты данных дело рук самого программиста.
__________________
while(1) {}

Старый 14.09.2010, 16:49
ekeeper вне форума Посмотреть профиль Отправить личное сообщение для ekeeper Найти все сообщения от ekeeper
  № 4  
Ответить с цитированием
ekeeper

Регистрация: May 2008
Сообщений: 102
Цитата:
Сообщение от Division Посмотреть сообщение
Так что отделять пакеты данных дело рук самого программиста.
отделять на сервере при отправке или на клиенте?

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

Регистрация: Jul 2008
Адрес: Украина, Херсон
Сообщений: 635
Отправить сообщение для Division с помощью ICQ
Ну смотри. Представим такой пакет:
- Первый байт - id типа передаваемой сущности
- Потом два байта - размер последующих данных пакета
- сами данные

Алгоритм чтения такой.
Если получили три байта или более - читаем заголовок и размер, понимаем сколько байт нужно еще прочитать чтобы полностью составить пакет.
После того как пакет прочитан, передаем его кому-то на обработку и разгребаем следующие пришедшие данные.
__________________
while(1) {}

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

Регистрация: May 2008
Сообщений: 102
спасибо, будем пробовать

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

блогер
Регистрация: Mar 2008
Адрес: РФ, Санкт-Петербург
Сообщений: 2,272
Записей в блоге: 5
Отправить сообщение для gloomyBrain с помощью ICQ Отправить сообщение для gloomyBrain с помощью Skype™
Цитата:
В TCP/IP нет понятия пакета - это потоковый протокол
Эмм.. А как тогда гарантировать доставку...?

Вообще говоря TCP/IP - это несколько протоколов разного уровня. И как подсказывает Википедия - пакеты там все таки есть.
Другое дело, что как со стороны FP, так, зачастую, и со стороны сервера, мы работаем не с пакетами, а с порциями данных, которые могут состоять из нескольких пакетов
__________________
...вселенская грусть


Последний раз редактировалось gloomyBrain; 14.09.2010 в 17:12.
Старый 14.09.2010, 17:13
ekeeper вне форума Посмотреть профиль Отправить личное сообщение для ekeeper Найти все сообщения от ekeeper
  № 8  
Ответить с цитированием
ekeeper

Регистрация: May 2008
Сообщений: 102
Цитата:
Сообщение от gloomyBrain Посмотреть сообщение
А Вы flush на сервере после каждого сообщения вызываете?
Хоть сервак не мой, но походу нет.

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

блогер
Регистрация: Mar 2008
Адрес: РФ, Санкт-Петербург
Сообщений: 2,272
Записей в блоге: 5
Отправить сообщение для gloomyBrain с помощью ICQ Отправить сообщение для gloomyBrain с помощью Skype™
Когда вы пишете что-то в сокет - данные не отправляются сразу, они какое-то время висят в буфере.
flush очищает данные накопленные в буфере сокета. То есть, грубо говоря, выталкивает их - бегите, мол, ребята, на том конце провода вас ждут.
Если делать flush самостоятельно (не дожидаясь пока как-то все само отправится), то шансы на склейку сообщений стремительно падают.
Касательно алгоритма Нейгла - так ни разу с ним и не столкнулся, для меня это все еще миф =)
__________________
...вселенская грусть

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

Регистрация: Jul 2008
Адрес: Украина, Херсон
Сообщений: 635
Отправить сообщение для Division с помощью ICQ
Да, я не правильно выразился. Это стек протоколов) Но суть в том что программист ни о каких пакетах в TCP/IP не ведает, а работает с потоком данных. Доставку гарантирует сам протокол, программисту для этого делать ничего не нужно.
Другое дело UDP - вот здесь отсылаются пакеты. Гарантия и порядок доставки ложится на программиста (в сетевых шутерах потери не критичны, так что предпочтительней UDP юзать для сетевого мочилова. TCP/IP будет упорно доставлять в том числе и устаревшие данные)
__________________
while(1) {}


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

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

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


 


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


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