Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.12.27;
Скачать: CL | DM;

Вниз

Частота посыла пакета (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;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.017 c
2-1257856549
Kolan
2009-11-10 15:35
2009.12.27
Самодельная отрисовка мигает


2-1257909781
igan
2009-11-11 06:23
2009.12.27
Типы данных C, VB -> Delphi


2-1257580554
FIL-23
2009-11-07 10:55
2009.12.27
Трехмерное рисование графиков


1-1229944689
dmitry_12_08_73
2008-12-22 14:18
2009.12.27
Получение ссылки на файл после нажатия в проводнике "Копировать"


11-1201519573
Татьяна
2008-01-28 14:26
2009.12.27
Программирование многооконного приложения для WinCE