Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2009.12.27;
Скачать: [xml.tar.bz2];

Вниз

Частота посыла пакета (TServerSocket и пт)   Найти похожие ветки 

 
antonn (work)   (2008-05-19 13:13) [0]

начал юзать сеть, пишу игрушку, чаты и логические (медленные) игры уже пройдены. Игрушка более менее требовательная к сетевой составляющей. Использую копмоненты TServerSocket и TClientSocket. Игра представляет собой массовую атаку всяких вражин на игроков, кол-во игроков ну 8, а вот вражин допустим 500 (короче много). Все они на сервере, сервер клинтам отправляет 10 раз в секунду состояние поля всем игрокам. Размер структуры на каждого монстра 13 байт. Итак сам вопрос - это реально 10 раз в секунду каждому игроку отправлять пакет по ТСР размером 640 байт? По сути меня смущает не объем отправляемых данных, а частота отправления. Реально ли этого? Проверить пока не могу:)


 
Сергей М. ©   (2008-05-19 13:31) [1]

Простые примерные расчеты:

Минимально необходимая пропускная способность сети  640 * 10 * 8 ~ 56 кбод

Это без учета накладных расходов транспортного+межсетевого+сетевого уровней (по модели OSI). С учетом оного и прочих общесистемных ~ 100 кбод

Если это условие обеспечивается, то остальное не столь существенно.

А зачем собссно нужна периодическая доставка пакетов всем клиентам ? Достаточно отправлять изменения игровой ситуации, а не все ситуацию целиком.


 
antonn (work)   (2008-05-19 13:51) [2]


> Сергей М. ©   (19.05.08 13:31) [1]

ну ты в кримсонленд и его клоны играл? :) там обычно все шевелится и бегает в больших кол-вах (хоть и медленно, короче мясо обычное), поэтому я предполагаю наихудший вариант. Даже с учетом только изменений и отправки только видимых вражин. Сеть - Т1 или адсл от 128кбс. Меня просто смущает частота отсыла...


 
Сергей М. ©   (2008-05-19 13:55) [3]


> ты в кримсонленд и его клоны играл?


Я похож на великовозрастного детинушку, которого кроме компьютерных цацек больше ничего не интересует ?)


> Меня просто смущает частота отсыла


А вот чтобы не смущала, не следует делать это периодически, а следует отсылать только дельту, т.е. инф-цию об произошедших изменениях на  сцене.


 
antonn (work)   (2008-05-19 15:21) [4]


> Я похож на великовозрастного детинушку, которого кроме компьютерных
> цацек больше ничего не интересует ?)

ой ну такой сурьезный, куда бы деться)))

ладно, попробую переделать архитектуру (и самому ясно, что как то кривовато), попробую дома на практике :)


 
DVM ©   (2008-05-19 15:25) [5]


> Итак сам вопрос - это реально 10 раз в секунду каждому игроку
> отправлять пакет по ТСР размером 640 байт?

Конечно реально. Это небольшой объем.


 
Сергей М. ©   (2008-05-19 16:37) [6]


> DVM ©   (19.05.08 15:25) [5]
>
>


> Это небольшой объем


Смотря для кого он "небольшой")

Даже при идеальных на стороне сервера условиях засада может поджидать совсем в других кустах - на стороне удаленного клиента, который работает, скажем, через GPRS-модем.


 
DVM ©   (2008-05-19 17:30) [7]


> засада может поджидать совсем в других кустах - на стороне
> удаленного клиента, который работает, скажем, через GPRS-
> модем.

ну в требованиях к игре оговаривать надо минимальную пропускную способность канала.


 
antonn (work)   (2008-05-19 18:11) [8]


> Конечно реально. Это небольшой объем.

так вот меня и смущал не объем, а частота. Типа задержки чтобы не были большие. Объем кстати может возрасти до 1Кб. Ну и думаю сделать игру в пределах 100Мбит


 
Сергей М. ©   (2008-05-19 21:04) [9]


> меня и смущал не объем, а частота


Она-то тут причем ?
Пропускная способность той или иной подсети в сети на самом ее "узком" участке - главное "узкое место".


> Объем кстати может возрасти до 1Кб


Что уж там мелочиться ?
Завтра ты захочешь гонять по сети видео и аудио - тут и 50 кб не ограничение)


> думаю сделать игру в пределах 100Мбит


Ну и нафих такая кому нужна в наше время, когда для многих и пол-мегабода есть счастье великое ?


 
antonn ©   (2008-05-19 23:14) [10]


> Она-то тут причем ?

лаги будут :)


> Завтра ты захочешь гонять по сети видео и аудио - тут и
> 50 кб не ограничение)

да, я работаю над этим %)


> Ну и нафих такая кому нужна в наше время, когда для многих
> и пол-мегабода есть счастье великое ?

а это типа велосипед, не для народа, больше для себя :)

вот еще один вопрос родился - как заставить Socket.SendStream(); не убивать передаваемый стрим?


 
Сергей М. ©   (2008-05-20 08:20) [11]


> как заставить Socket.SendStream(); не убивать передаваемый
> стрим?
>


Без переделки TCustomWinSocket никак.
А зачем ?


 
antonn ©   (2008-05-20 08:56) [12]

ну будет у меня код отправки всем клиентам:
for i:=0 to FServerSocket.Socket.ActiveConnections-1 do begin
  FServerSocket.Socket.Connections[i].SendStream(ms);
end;

и в каждой итеррации цикла придется создавать ms, копировать в нее другой поток (тот, который нужно передать) и отдавать сокету. Каждый раз создание объекта, копирование, убийство... имхо было бы лучше, если бы создался буфер один раз не только на вызов процедуры, а в течении жизни класса (в котором FServerSocket)


 
Сергей М. ©   (2008-05-20 09:07) [13]


> было бы лучше, если бы создался буфер один раз не только
> на вызов процедуры, а в течении жизни класса


Ну возьми да создай его, в чем проблема ?
Ничто не мешает использовать SendBuf вместо SendStream.


 
Sha ©   (2008-05-20 11:54) [14]

> antonn
Посмотри, как сделаны эмуляторы WOW, найдешь много интересного.


 
antonn (work)   (2008-05-20 13:48) [15]


> Ничто не мешает использовать SendBuf вместо SendStream.
>

уел, сдаюсь, не посмотрел внимательно, пойду убьюсь :)


> Sha ©   (20.05.08 11:54) [14]
>
> > antonn
> Посмотри, как сделаны эмуляторы WOW, найдешь много интересного.
>

есть пара ссылок, пожалуйста?


 
Сергей М. ©   (2008-05-20 15:06) [16]


> пойду убьюсь


Рановато, не доуел еще)

Полагаю, что дальнейшее движение к цели обязательно покажет. что данные, отправляемые клиентам, все же будут различны, так что придется с каждым из них ассоциировать свю очередь отправки. И это означает, что SendStream при прочих равных условиях будет выглядеть все же удобней и предпочтительней)


 
antonn (work)   (2008-05-20 15:28) [17]

да мне с самого начала посыл стрима понравился, жаль он там внутри себя буфер не держит, а мой киляет :( ладно бы я подсовывал только что созданый, так нет, он не знает что мой стрим "постоянный"... вообещ ен понимаю логики... сделали бы уже опционально. расковыряю наверное исходник сокета, сделаю SendStream2() %)


 
Сергей М. ©   (2008-05-20 16:55) [18]


> ладно бы я подсовывал только что созданый


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

И ничего страшного, кстати, в частом конструировании стрима нет - основные "тормоза" приходятся на реаллокацию в сторону увеличения внутреннего буфера стрима, а не на его конструирование. И это тоже не великая проблема, если воспользоваться менеджером памяти, оптимизированным в части увеличения производительности операций реаллокации и/или сборки мусора, например, FastMM4.


> расковыряю наверное исходник сокета, сделаю SendStream2


Вот уж глупее затеи не придумать)

Если уж тебя одолели лавры Кулибина, сделай своего наследника стрима, перекрой в нем деструктор и возбуждай в перекрытом деструкторе исключение, а "снаружи" лови его и гаси - вот тебе и простейший обход нежелательного поведения SendStream, безо всякого коверкания исходников компонента)


 
DVM ©   (2008-05-20 21:09) [19]


> antonn (work)   (20.05.08 15:28) [17]

Мне кажется, что было бы лучше вообще не использовать TServerSocket и TClientSocket, а сделать свои сервера и клиента. Для конкретной задачи это будет и более производительное и более удобное решение.
TServerSocket и TClientSocket хороши для относительно простых задач без экзотики.


 
Eraser ©   (2008-05-21 01:37) [20]

> [0] antonn (work)   (19.05.08 13:13)

реально, только не забудь алгоритм Нагеля для сокета отключить, а то задержки будут.



Страницы: 1 вся ветка

Форум: "Сети";
Текущий архив: 2009.12.27;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.006 c
11-1209885307
SPeller
2008-05-04 11:15
2009.12.27
KOLTIFF.ImageAsBitmap экспортирует неправильный битмап


6-1211196570
KuH
2008-05-19 15:29
2009.12.27
Авторизация через TServerSocket


2-1257545435
Igorishe
2009-11-07 01:10
2009.12.27
передача метода


15-1256434719
Antoxa
2009-10-25 04:38
2009.12.27
Почему сайт "умер"..?


3-1232343690
pavel_guzhanov
2009-01-19 08:41
2009.12.27
Можно ли проиндексировать поле в представлении?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский