Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   програмирование покера (http://www.flasher.ru/forum/showthread.php?t=197866)

vladimir198787 14.04.2013 09:17

програмирование покера
 
При принятии решения игроком (увеличении ставки,скинуть,чек) он нажимает на соответствующую кнопку в приложении as3, слушатель события передает информацию на сервер php и сохраняет данные в таблицу MySQL. Как сделать так чтобы он отправлял события другим игрокам ? нашел что можно использовать сокеты, но не представляю как это выглядит(новичок), если кто подскажет буду рад.

caseyryan 14.04.2013 11:06

Тут уж, как говорится, гугл в помощь. Такую большую тему в двух словах не объяснишь.

mikhailk 14.04.2013 11:50

Гугл-гуглом, но что гуглить...

На текущий момент мне кажется самым простым решением FlashSocket(клиент) +Node.js(сокет-сервер)+MongoDB(простая и быстрая бд для высоконагруженных приложений). На этой связке даже новичок сможет сделать что-то работающее.

ЗЫ. Про php+MySQL в данном случае забыть (разве что на php написать админку к приложению, php с MongoDB работает нормально).

Sync 14.04.2013 12:20

Если пользователей планируется в количестве пары тысяч, то это всё спокойно потянет прямая связка пых+мускуль.
интересно знать что конкретно вас неустраивает в такой связке и сервере на пыхе?
какой планируется сервер под Монгу? Почему именно она?

mikhailk 14.04.2013 12:37

Вроде как уже тыщу раз обсуждалось? :)
Сокет-сервера на пыхе писать бессмысленно.
Сокет-сервер надо писать на технологии, которая для этого предназначена.
Или возникает сомнение в необходимости сокет-сервера для покера?

В остальном - все очень просто. Сейчас делаю игровой проект на сокет-сервере и Node.js - реально кульная вещь. Не люблю Javascript, но тут он на месте (хотя, Node.as была бы, конечно, на порядок круче). А когда начинаешь собирать сервер на js, который работает с JSON, то естественным становится и выбор в качестве бд MongoDB, Redis, еще там кое-что есть в семействе noSQL. Мне понравилась MongoDB.

Вопрос про сервер не совсем понял. От приложения зависит. MongoDB шардится естественным образом по мре необходимости. Node.js по мнению разработчиков держит 3-5к пользователей на один процессор сервера. Впрочем, не думаю, что автору требуется такая мощность, так что MongoDB прекрасно уживется на том же сервере, где запущен сокет-сервер.

Sync 14.04.2013 12:51

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

caseyryan 14.04.2013 13:08

Цитата:

и Node.js - реально кульная вещь
Чем он так крут? Можно пример?
Посмотрел сайт, документацию. Особо крутого ничего не вижу
Разве что для не знающих английского проще в освоении. А так, обычный сервер, ничем не лучше других аналогов.

alatar 14.04.2013 13:48

Цитата:

Сообщение от mikhailk (Сообщение 1129774)
хотя, Node.as была бы, конечно, на порядок круче

Ну так, в чем проблема? :)

mikhailk 14.04.2013 14:03

Цитата:

а по поводу именно сокет-сервера - совсем не обязательно, хотя, конечно, удобнее)))
Альтернатива сокет-серверу - лонг-полл. Не будете же долбить в сервер раз в секунду. С использованием лонг-полла с пхп - 3-5 метров памяти на каждого пользователя онлайн. Я, кстати, собирал. Работает удобно и устойчиво, но память... Тоже вилы.


Цитата:

А так, обычный сервер, ничем не лучше других аналогов.
А. Порог вхождения
Сокет-сервер на c++,c#,java новичок собрать не сможет в принципе.
Сокет-сервер на node.js новичок соберет.

В. Скорость разработки
Внесение изменений в код сервера происходит быстрее и проще.

Добавлено через 1 минуту
Цитата:

Ну так, в чем проблема?
Занятно.

Добавлено через 5 минут
Цитата:

ибо монга настроек памяти не имеет, отжирает весь объем и освобождает лишнее по запросу.
при этом живет более-менее быстро пока данные гарантированно умещаются в память
Все правильно. Она в определенном смысле работает по принципу кей-вэлью хранилищ.
Ксати, я знаю проекты, которые переводились и переводятся сейчас с MySQL на MongoDB, и мне не известны случаи обратного перевода.

Хотя, для какой-нибудь фермы я бы MongoDB брать не стал и более того, собрал бы сервер на старом добром php/MySQL.

chamele0n 14.04.2013 14:09

еще есть такая штука как XMPP

Sync 14.04.2013 15:24

Цитата:

Сообщение от mikhailk (Сообщение 1129793)
Все правильно. Она в определенном смысле работает по принципу кей-вэлью хранилищ.
Ксати, я знаю проекты, которые переводились и переводятся сейчас с MySQL на MongoDB, и мне не известны случаи обратного перевода.

Ок. Можете приводить пример статистики - на 1 млн записей монга делала сложную выборку около 20 секунд. мускуль справлялся за 1с и 0.4с на повторную выборку. Дальше монгу не поддерживали.
Есть надежда что недавняя последняя версия будет быстрее, ибо сама идея и способы работы с данными в монге мне нравяцца, но пока - увы.

mikhailk 14.04.2013 21:39

Кстати, я как раз не агитирую за монгу, как могло показаться. :)

Топик стартер хочет создать супер-пупер игру, не представляя себе, как это вообще делается. Т.е., подозреваю, ему все равно, куда идти и что изучать. Я просто предложил вариант с достаточно низким порогом вхождения.

PainKiller 15.04.2013 00:54

Цитата:

Цитата:
Сообщение от mikhailk
хотя, Node.as была бы, конечно, на порядок круче
Ну так, в чем проблема?
Возможно не в тему, но Node.as кто нибудь пробовал? Если он действительно полный аналог node.js то это реально круто, но так как это штука мало известная, скорее всего там дофига багов и неудобств. Но на досуге надо будет поковырять.

in4core 15.04.2013 02:17

Сокет серверы какие то, для таких вещей как по мне - медиа сервер типа вовзы - есть адекватное решение. Сокет серверы это для игровых автоматов хороши, например.

alatar 15.04.2013 03:58

Цитата:

но так как это штука мало известная, скорее всего там дофига багов и неудобств
Что бы штука стала известная и малоглючная ее надо использовать и всячески продвигать.

caseyryan 15.04.2013 07:43

Цитата:

Сокет серверы это для игровых автоматов хороши, например.
Интересный вывод )

mikhailk 15.04.2013 10:44

Цитата:

Сокет серверы какие то, для таких вещей как по мне - медиа сервер типа вовзы - есть адекватное решение.
Можно и на вовзе.
А функционал на java.
Топик-стартер будет полгода мучиться, пока все это запустит, напишет, соберет, отладит...
А на связке FlashSocket-Node.js он запустит простенький серверок за две недели-месяц. Если руки не совсем кривые.

in4core 15.04.2013 19:21

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

Psycho Tiger 15.04.2013 20:17

Цитата:

то естественным становится и выбор в качестве бд MongoDB, Redis, еще там кое-что есть в семействе noSQL. Мне понравилась MongoDB.
Redis – это не совсем БД в том понимании. Или ты не сравнивал mongo vs redis, а просто константировал что тебе понравилось?
Цитата:

Ок. Можете приводить пример статистики - на 1 млн записей монга делала сложную выборку около 20 секунд. мускуль справлялся за 1с и 0.4с на повторную выборку. Дальше монгу не поддерживали.
А ещё монга это NoSQL. Соответственно, здесь нету плюшек SQL, типа DISTINCT :)
Надо понимать, что где использовать. Schemaless DB хороши для тех мест, где эта самая схема мешает. Она удобна для быстрого прототипирования – нет заморочек с конструкциями таблиц / миграциями при MDD (Model Driven Development) и прочем. Создатели всегда говорили, что монга промежуточное звено, которое стоит до серьезных SQL - баз.
Цитата:

Сокет серверы это для игровых автоматов хороши, например.
А есть для чего ещё уместны сокет-серверы?

Sync 15.04.2013 21:50

Цитата:

Сообщение от Psycho Tiger (Сообщение 1129954)
А ещё монга это NoSQL. Соответственно, здесь нету плюшек SQL, типа DISTINCT :)
Надо понимать, что где использовать. Schemaless DB хороши для тех мест, где эта самая схема мешает. Она удобна для быстрого прототипирования – нет заморочек с конструкциями таблиц / миграциями при MDD (Model Driven Development) и прочем. Создатели всегда говорили, что монга промежуточное звено, которое стоит до серьезных SQL - баз.

это сейчас про что было? в монге своих плюшек хватает за глаза. И DISTINCT вполне себе хорошо реализовывается. Но вот жадность к памяти, месту, заточка под многосерверность - делают её не столь удачным решением, даже не смотря на множество восторженных откликов.

in4core 15.04.2013 22:20

Цитата:

А есть для чего ещё уместны сокет-серверы?
Для чатов каких нить, для мультиплееров простых игр... хз для каких целей люди используют, я сказал для чего использовал бы я :)

mikhailk 15.04.2013 22:33

Цитата:

Redis – это не совсем БД в том понимании. Или ты не сравнивал mongo vs redis, а просто константировал что тебе понравилось?
Да. Не сравнивал.


Цитата:

Надо понимать, что где использовать. Schemaless DB хороши для тех мест, где эта самая схема мешает. Она удобна для быстрого прототипирования
Я за свою жизнь видел неподъемную кучу баз данных (застал еще ADABAS, не путать с адидасом :), и прочие дореляционные СУБД ). Могу сказать точно, для простых приложений документо-ориентированная база данных - это просто песня. У меня сейчас три коллекции с JSON-объектами (BSON, естественно, но не суть), которые описывают весь основной функционал. В реляционной СУБД у меня уже было бы минимум пятнадцать таблиц и я бы уже во всю джойнил их направо и налево.

Sync 15.04.2013 22:38

Цитата:

Сообщение от mikhailk (Сообщение 1129970)
Могу сказать точно, для простых приложений документо-ориентированная база данных - это просто песня. У меня сейчас три коллекции с JSON-объектами (BSON, естественно, но не суть), которые описывают весь основной функционал. В реляционной СУБД у меня уже было бы минимум пятнадцать таблиц и я бы уже во всю джойнил их направо и налево.

Можно немного оффтопа про производительность? количество выборок-вставок, объемы данных и т.д. насколько хорошо держит нагрузку и на каких серверах.
Есть просто мысль попробовать монгу не для статы, а как основную базу, но после предыдущего опыта как-то не хочется снова делать лишнюю работу.

mikhailk 15.04.2013 22:49

Нет, своего опыта по готовым проектам у меня нет, более того, по текущему проекту хайлоада и не случится.

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

Впрочем, что касается непосредственно MongoDB, есть хорошая книжка Кайл Бэнкер "MongoDB в действии". Там все прекрасно написано и про плюсы и про минусы.

caseyryan 16.04.2013 09:52

Цитата:

Для чатов каких нить, для мультиплееров простых игр...
Ок, а для сложных тогда что?

Psycho Tiger 16.04.2013 09:54

Цитата:

это сейчас про что было? в монге своих плюшек хватает за глаза. И DISTINCT вполне себе хорошо реализовывается. Но вот жадность к памяти, месту, заточка под многосерверность - делают её не столь удачным решением, даже не смотря на множество восторженных откликов.
Ну возьми не дистинкт, а джоины. Я про другое.
Цитата:

Есть просто мысль попробовать монгу не для статы, а как основную базу, но после предыдущего опыта как-то не хочется снова делать лишнюю работу.
Ну, я бы не рисковал. В монгу можно записать неправильно, и это порой очень беда. Но вообще, если работаешь на чем-то вроде RoR, т.е. в работе используется ORM (я про MDD, когда работаешь с моделями, а не с какими-то-там-таблицами), то можешь попробовать. В случае чего, полностью переехать на другую СУБД будет делом пары часов.

mikhailk 16.04.2013 10:48

Совсем уже не для этой темы, но у меня ощущение, что оценивать документарно-ориентированную бд с позиций реляционной - как минимум нелогично.

Вот очень простой пример с профилем пользователя в какой-нубудь ферме или ходилке-бродилке:

Код:

{
  "name": "Pedro",
  "xp": "1200",
  "itemsInBag": [
    {"slot":1, "catalogID": "11", "count": "5"},
    {"slot":2, "catalogID": "12", "count": "10"},
    {"slot":3, "catalogID": "13", "count": "5"}
  ]
}

В реляционной БД тут две очевидные таблицы (есть, конечно, вариант с сериализацией содержимого itemsInBag и записью в текстовое поле, но в большинстве случаев это именно две таблицы). Допустим, по итогам действия перса ему начислилось 30xp и израсходовались 3 айтема из первого слота. Что мы имеем в реляционной БД? Два апдейта, причем, в определенных условиях еще и объединенных транзакцией. А в документарной БД - одна атомарная операция с документом, причем, его не надо таскать из базы целиком, а достаточно просто указать, какие части документа и как изменить. Т.е., даже на таком банальном примере видно, что количество обращений к БД, как минимум, разное. А если профиль собран, скажем, не из двух, а из пяти таблиц? Например, у пользователя еще есть подарки, производства, скиллы, ученики-последователи, привилегии и пр.?

Совершенно очевидно, что если проектировать документарную БД по правилам реляционной (1 таблица = 1 коллекция), то это будет алес капут и эффективно работать не сможет. Поэтому для документарных баз, например, принципиален сознательный отказ от 100%-ой нормализации (что, конечно, плохо ложится в голову после работы с реляционными БД). Есть еще некоторое количество отличий, все описано в той книге, которую я выше указал.

Сорри за оффтоп. :)

Psycho Tiger 16.04.2013 11:05

Согласен. Я что-то с головой ушел в веб и подзабыл, что речь может идти и про игрули )

in4core 16.04.2013 13:13

Цитата:

Ок, а для сложных тогда что?
Многопоточные Медиа серверы .
Нет нет, я ни в коем случае не говорю, что сокеты это плохо, или с ними нельзя жить. Можно и в пеинте монализу рисовать, это понятно. Но как то сложилось так, что для серьезных проектов - выбирают серьезные технологии аля JAVA и т.п. - уж для сервера точно. имхо

Котяра 16.04.2013 13:58

Цитата:

Многопоточные Медиа серверы
А они по нуль-пространственному телепатическому коридору работают..
Ага.

caseyryan 16.04.2013 14:33

Цитата:

Нет нет, я ни в коем случае не говорю, что сокеты это плохо, или с ними нельзя жить. Можно и в пеинте монализу рисовать, это понятно. Но как то сложилось так, что для серьезных проектов - выбирают серьезные технологии аля JAVA и т.п. - уж для сервера точно. имхо
Вот тут у меня просто случился когнитивный диссонанс..

Может я сейчас открою вселенскую тайну, но у меня есть собственный сервер на Java, который работает через сокеты :D И до этого сколько раз сталкивался, большинство работало через сокеты. И Wowza, да да WOVZA - это тоже сокет сервер, написанный на джаве :D

in4core 16.04.2013 19:11

Ну сокет это как бы разъём. То есть IP адрес и порт. Дырка через которую два процесса могшут взаимодействовать. Вовза на некоем уровне является сокет-сервером, но для работы с ней используются транспортные протоколы более высокого уровня. То есть не уверен что она отзовётся если ты минуя эти протоколы начнёшь ей шпулять пакеты

caseyryan 16.04.2013 19:26

Цитата:

То есть не уверен что она отзовётся если ты минуя эти протоколы начнёшь ей шпулять пакеты
Куда она денется. Естественно она не ответит ничем разумным, если данные не будут соответствовать ее протоколу, но пакеты она будет принимать в любом случае.
К слову, транспортные протоколы - это одно, а сокет - это другое. Они друг друга не заменяют, а дополняют. В моем сокет сервере в качестве транспортного протокола используется google protobuf, но сервер построен на сокетах.

Psycho Tiger 16.04.2013 20:28

Цитата:

Сообщение от in4core (Сообщение 1130069)
Ну сокет это как бы разъём. То есть IP адрес и порт. Дырка через которую два процесса могшут взаимодействовать. Вовза на некоем уровне является сокет-сервером, но для работы с ней используются транспортные протоколы более высокого уровня. То есть не уверен что она отзовётся если ты минуя эти протоколы начнёшь ей шпулять пакеты

Как я люблю, когда ты начинаешь рубить правду матку )
Если бы ты сдавал экзамен, то:
Цитата:

Ну сокет это как бы разъём. То есть IP адрес и порт.
Минус полбалла. Сокет – это поток, который можно цеплять хоть через файл.
Цитата:

Дырка через которую два процесса могшут взаимодействовать.
Верно. Обычный I/OStream.
Цитата:

Вовза на некоем уровне является сокет-сервером, но для работы с ней используются транспортные протоколы более высокого уровня.
Полное непонимание что такое транспортный протокол. Минус два балла.
Если тебе интересно, можешь почитать про OSI. А транспортный протокол в стеке лежит там, где ты программируя о нём и не подозреваешь.
Цитата:

То есть не уверен что она отзовётся если ты минуя эти протоколы начнёшь ей шпулять пакеты
И вновь минус. Как ты будешь отсылать пакеты? Почтой России? Тебе нужно завернуть свои данные в пакет в TCP (про UPD вообще умолчу), который нужно завернуть в пакет IP и только потом отправить. Но благодаря высокоуровневым языкам тебе и об этом знать не нужно.

Приходите на пересдачу.

Sync 17.04.2013 01:20

Цитата:

Сообщение от in4core (Сообщение 1130027)
Но как то сложилось так, что для серьезных проектов - выбирают серьезные технологии аля JAVA и т.п. - уж для сервера точно. имхо

Немного непонятно: какой критерий "серьезности" проекта? DAU в 100 000 -серьезно, или ещё нет?
а покер серьезно?
а если игра развлекательная? это серьезный проект или как?
почему-то всегда казалось что в деле выбора сервера основную роль должна играть целесообразность, а не "серьезность"

mikhailk 17.04.2013 10:57

Если говорить про игровые проекты, то как мне кажется сейчас - нет.

За исключением монстрообразных мультиплееров, которые делает несколько десятков-сотен человек год-два-три и больше, там, наверное, да. Но если брать игры для социалок, там настолько непонятно, выстрелит игра или не выстрелит, что выбор как правило делается в сторону сокращения сроков разработки. Лишний выделенный сервер на том же хецнере - 3-5 тыс. рублей. Проще заложить горизонтальное расширение и сократить сроки разработки, нежели делать игрушку исключительно эффективной, но на несколько месяцев дольше.

ЗЫ. Я этот подход не слишком одобряю, но это объективные реалии. Сейчас большинство игр честно запускается с открытым бетатестированием. У разработчиков нет ни времени, ни желания для полноценного тестирования собственными силами.

caseyryan 17.04.2013 12:05

Цитата:

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

mikhailk 17.04.2013 12:37

Цитата:

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

Большинство игр выпускается в бета-тестирование вообще без предварительного тестирования как такового. Если еще точнее - функционал условно тестируется программерами в момент разработки/сборки/подключения и еще в момент ввода контента и настройки баланса контент-менеджерами/геймдизами.

Впрочем, это мое мнение и отстаивать его во что бы то ни стало смысла не вижу.

Sync 17.04.2013 16:42

Цитата:

Сообщение от mikhailk (Сообщение 1130150)
выбор как правило делается в сторону сокращения сроков разработки. Лишний выделенный сервер на том же хецнере - 3-5 тыс. рублей. Проще заложить горизонтальное расширение и сократить сроки разработки, нежели делать игрушку исключительно эффективной

Т.е. никто не рассчитывает на вариант "выстрелит"? ибо если такое случится на сервере "как получилось", можно умучиться "расширять горизонты"

iflamberg 17.04.2013 17:00

Чего там "умучиваться"? Месяц нанятого программиста - 2000$. Еще один сервер в стойке - 1000$. Вывод?


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

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