Серверная часть для игры в контакте на ror

106 views
Skip to first unread message

Denis Bazhan

unread,
Jan 12, 2012, 5:48:19 PM1/12/12
to ror...@googlegroups.com
Народ кто то пробовал писать серверную часть для игры в контакте на ROR ?
Может есть у кого что почитать по этой теме?

Andrey Ognevsky

unread,
Jan 12, 2012, 5:51:11 PM1/12/12
to ror...@googlegroups.com
Плохая идея. Получится слишком громоздко, слишком «многозапросно» и слишком кустарно. ИМХО. Но работать оно, несомненно, будет.

On Friday, January 13, 2012 at 12:48 AM, Denis Bazhan wrote:

Народ кто то пробовал писать серверную часть для игры в контакте на ROR ?
Может есть у кого что почитать по этой теме?

--
--
Данное сообщение отправлено Вам, так как Вы являетесь подписчиком группы "RubyOnRails to russian" на группах Google.
FAQ группы находится по адресу: http://ru.wikibooks.org/wiki/RubyFAQ
 
Для того, чтобы отправить сообщение в эту группу, пошлите его по адресу
ror...@googlegroups.com
Чтобы отменить подписку на эту группу, отправьте сообщение по адресу: ror2ru-un...@googlegroups.com
Дополнительные варианты находятся на странице группы http://groups.google.com/group/ror2ru?hl=ru

Denis Bazhan

unread,
Jan 12, 2012, 6:31:22 PM1/12/12
to ror...@googlegroups.com
Возможно вы знаете другие решения? Может что есть почитать? 

13 января 2012 г. 0:51 пользователь Andrey Ognevsky <a.ogn...@gmail.com> написал:

Andrey Ognevsky

unread,
Jan 12, 2012, 7:04:49 PM1/12/12
to ror...@googlegroups.com
Поищи тред, который Алекс Дмитриев создавал, как раз по поводу игры. Ну и он сам, и Макс Лапшин смогут лучше рассказать, да и не раз тут про это говорилось, поделюсь своими соображениями:

— для справочных данных (вещи, миссии, etc) использовать MongoDB или что–то подобное
— для хранения ассоциаций использовать Redis
— использовать EventMachine для главного игрового процесса
— по возможности использовать Backbone/Spine/etc на клиенте, а сервером отдавать JSON
— по возможности использовать вебсокеты

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

Denis Bazhan

unread,
Jan 12, 2012, 10:39:44 PM1/12/12
to ror...@googlegroups.com
Спасибо большое за информацию. 

13 января 2012 г. 2:04 пользователь Andrey Ognevsky <a.ogn...@gmail.com> написал:

Alex Dmitriev

unread,
Jan 13, 2012, 2:07:09 AM1/13/12
to ror...@googlegroups.com
Денис,

Немножко облегчу вам задачу, а заодно облегчу душу и расскажу о моих
последних экспериментах :)

Рельсы сгодятся лишь для создания прототипа или довольно простой игры,
где вся игровая логика вписывается в концепцию "запрос-ответ". Если в
какой бы то ни было момент игры нужно послать клиенту "ответ" без
соответствующего ему запроса - все, приехали, рельсы можно выкидывать
на помойку.

Вы своим вопросом меня замотивировали дописать таки давно валявшийся
блогопост про наши эксперименты с разработкой нового игрового сервера
:) Надеюсь, окажется полезным:

http://railorz.ru/articles/156-evented-game-server/


13 января 2012 г. 8:39 пользователь Denis Bazhan
<denis....@gmail.com> написал:


> Спасибо большое за информацию.
>
> 13 января 2012 г. 2:04 пользователь Andrey Ognevsky <a.ogn...@gmail.com>
> написал:
>
>> Поищи тред, который Алекс Дмитриев создавал, как раз по поводу игры. Ну и
>> он сам, и Макс Лапшин смогут лучше рассказать, да и не раз тут про это
>> говорилось, поделюсь своими соображениями:
>>

>> -- для справочных данных (вещи, миссии, etc) использовать MongoDB или
>> что-то подобное
>> -- для хранения ассоциаций использовать Redis
>> -- использовать EventMachine для главного игрового процесса
>> -- по возможности использовать Backbone/Spine/etc на клиенте, а сервером
>> отдавать JSON
>> -- по возможности использовать вебсокеты

--
Alex V. Dmitriev
Jabber/GTalk/MSN/AIM: rene....@gmail.com
Skype: rene-dekart
Blog: http://railorz.ru

Denis Bazhan

unread,
Jan 13, 2012, 2:38:25 AM1/13/12
to ror...@googlegroups.com
Отличная статья, очень помогла и спасла наверно не одну мою неделю жизни. Спасибо большое. 

13 января 2012 г. 9:07 пользователь Alex Dmitriev <rene....@gmail.com> написал:

Artiom Di

unread,
Jan 13, 2012, 3:43:21 AM1/13/12
to ror...@googlegroups.com
On Fri, 2012-01-13 at 12:07 +0500, Alex Dmitriev wrote:
> Рельсы сгодятся лишь для создания прототипа или довольно простой игры,
> где вся игровая логика вписывается в концепцию "запрос-ответ". Если в
> какой бы то ни было момент игры нужно послать клиенту "ответ" без
> соответствующего ему запроса - все, приехали, рельсы можно выкидывать
> на помойку.

Неужто так сложно juggernaut или ему подобное использовать?

Alex Dmitriev

unread,
Jan 13, 2012, 3:55:20 AM1/13/12
to ror...@googlegroups.com
> Неужто так сложно juggernaut или ему подобное использовать?

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

Max Lapshin

unread,
Jan 13, 2012, 4:01:25 AM1/13/12
to ror...@googlegroups.com
2012/1/13 Alex Dmitriev <rene....@gmail.com>:

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

Juggernaut — это такой неработающий сервер для рассылки сообщений по
подкюченным флешкам.

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

А так же для авторизации свежеподключенного пользователя делает
синхронный вызов к рельсам. Т.е. автор сделал proof-of-concept а
фтыкатели решили, что этим можно пользоваться.

Alex Dmitriev

unread,
Jan 13, 2012, 4:03:41 AM1/13/12
to ror...@googlegroups.com
Макс, ты развеял уж было набежавшую тучку сомнений :)

Если читал мою заметку по ссылке, можешь вкратце свое мнение сказать?
Мне интересно

13 января 2012 г. 14:01 пользователь Max Lapshin
<max.l...@gmail.com> написал:


> 2012/1/13 Alex Dmitriev <rene....@gmail.com>:
>>> Неужто так сложно juggernaut или ему подобное использовать?
>>
>> Не сложно. Вопрос исключительно подхода и стройности системы. Можете
>> описать целиком систему, построенную с использованием Juggernaut? Я,
>> если честно, слабо представляю, возможно ввиду недостатка знания этого
>> инструмента.
>>
>

> Juggernaut -- это такой неработающий сервер для рассылки сообщений по


> подкюченным флешкам.
>
> Нерабочий, потому что работает только с XML Socket и потому что для
> посылки по каналу перебирает всех клиентов и смотрит, не подписан ли
> клиент на канал.
>
> А так же для авторизации свежеподключенного пользователя делает
> синхронный вызов к рельсам. Т.е. автор сделал proof-of-concept а
> фтыкатели решили, что этим можно пользоваться.
>

> --
> --
> Данное сообщение отправлено Вам, так как Вы являетесь подписчиком группы "RubyOnRails to russian" на группах Google.
> FAQ группы находится по адресу: http://ru.wikibooks.org/wiki/RubyFAQ
>
>  Для того, чтобы отправить сообщение в эту группу, пошлите его по адресу
> ror...@googlegroups.com
>  Чтобы отменить подписку на эту группу, отправьте сообщение по адресу: ror2ru-un...@googlegroups.com
>  Дополнительные варианты находятся на странице группы http://groups.google.com/group/ror2ru?hl=ru

--

Artiom Di

unread,
Jan 13, 2012, 4:08:15 AM1/13/12
to ror...@googlegroups.com
On Fri, 2012-01-13 at 12:01 +0300, Max Lapshin wrote:
> Juggernaut -- это такой неработающий сервер для рассылки сообщений по
> подкюченным флешкам.
Так было когда джарегнаут был на руби. Так что более не актуально.

Джагернаута переписали на nodejs, и оно отлично пашет и поддерживает
100500 всевозможных вариантов доставки пуш-сообщения, лонг-поллы и
вебсокеты и в конце концов флеш (и даже какой-то страшный ActiveX
HTMLFile для IE)

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

Как следует из вышесказанного, это тоже не правда.

Alex Dmitriev

unread,
Jan 13, 2012, 4:22:38 AM1/13/12
to ror...@googlegroups.com
> Джагернаута переписали на nodejs, и оно отлично пашет и поддерживает
> 100500 всевозможных вариантов доставки пуш-сообщения, лонг-поллы и
> вебсокеты и в конце концов флеш (и даже какой-то страшный ActiveX
> HTMLFile для IE)

Окей, хорошо, он поддерживает push и прочее для доставки событий с
сервера на клиент. Вопрос - как доставлять с клиента на сервер?

Artiom Di

unread,
Jan 13, 2012, 4:28:01 AM1/13/12
to ror...@googlegroups.com
On Fri, 2012-01-13 at 14:22 +0500, Alex Dmitriev wrote:
> Вопрос - как доставлять с клиента на сервер?

GET /blabla HTTP/1.1
Host: game.tld

ну и так далее ;)

Жабаскриптом тем же ajax запросы посылать на события от клиента. А
клиент получает события от других клиентов по пуш каналу уже.

nem...@gmail.com

unread,
Jan 13, 2012, 4:34:45 AM1/13/12
to RubyOnRails to russian
Если я правильно понял то вот на github:
https://github.com/maccman/juggernaut#readme

и автор для примера использования указывает на:
https://github.com/maccman/holla

"Holla is a group chat app. The UI is built in a RIA fashion - i.e. is
totally asynchronous and super fast. I've open sourced it for a book
I'm writing on building Rich Internet Applications with JavaScript."

Good examples for:

* CSS3 theming (inspired by http://jquerymobile.com)
* Spine JS frontend
* Less
* Sprockets
* Juggernaut 2
* Async uploads with progress

Prerequisites

* Ruby 1.9.2
* Bundler
* Redis

Вот ещё описание (старое):
http://alexmaccaw.co.uk/posts/holla

демо здесь:
http://maccman-holla.heroku.com/

On Jan 13, 2:22 pm, Alex Dmitriev <rene.dek...@gmail.com> wrote:
> > Джагернаута переписали на nodejs, и оно отлично пашет и поддерживает
> > 100500 всевозможных вариантов доставки пуш-сообщения, лонг-поллы и
> > вебсокеты и в конце концов флеш (и даже какой-то страшный ActiveX
> > HTMLFile для IE)
>
> Окей, хорошо, он поддерживает push и прочее для доставки событий с
> сервера на клиент. Вопрос - как доставлять с клиента на сервер?
>
> --
> Alex V. Dmitriev

> Jabber/GTalk/MSN/AIM: rene.dek...@gmail.com

Max Lapshin

unread,
Jan 13, 2012, 5:48:40 AM1/13/12
to ror...@googlegroups.com
2012/1/13 Alex Dmitriev <rene....@gmail.com>:

> Макс, ты развеял уж было набежавшую тучку сомнений :)
>
> Если читал мою заметку по ссылке, можешь вкратце свое мнение сказать?
> Мне интересно
>

Ну а че, всё по делу. Я не очень хороший комментатор, мне и так ясно,
какие у рельс ограничения.
Ты спрашивай у топикстартера =))

Маленькие комментарии:

1) я бы вообще не стал ориентироваться на флеш-сокеты. Нафиг они
нужны, если есть long-poll
2) к чему опрашивать 100 раз в секунду что-то? Это очень жестокая
вещь. Если хочется push, то надо ставить что-то, что делает push.

Артём Семёнов

unread,
Jan 13, 2012, 5:51:00 AM1/13/12
to ror...@googlegroups.com
Топикстартеру: ну, cowboy в зубы и вперед.

13 января 2012 г. 14:48 пользователь Max Lapshin
<max.l...@gmail.com> написал:

Илья Плотников

unread,
Jan 13, 2012, 5:56:37 AM1/13/12
to ror...@googlegroups.com
Салют.

Если клиент будет на флеше, то серверный бэкенд лучше всего писать на
java и для этого уже есть готовый сервер http://www.smartfoxserver.com/
(пример игры "Backyard monsters" на facebook) Во всяком случае решение
уже протестировано и на нем заработаны сотни денег. А так topface и
лицемер написаны на ror, но там, увы, только десятки денег. Вобщим как
обычно - технологию под задачу и лучше не писать велосипедов.


13.01.2012 2:48, Denis Bazhan пишет:


> Народ кто то пробовал писать серверную часть для игры в контакте на ROR ?
> Может есть у кого что почитать по этой теме?

> --
> --
> Данное сообщение отправлено Вам, так как Вы являетесь подписчиком
> группы "RubyOnRails to russian" на группах Google.
> FAQ группы находится по адресу: http://ru.wikibooks.org/wiki/RubyFAQ
>
> Для того, чтобы отправить сообщение в эту группу, пошлите его по адресу
> ror...@googlegroups.com
> Чтобы отменить подписку на эту группу, отправьте сообщение по адресу:
> ror2ru-un...@googlegroups.com
> Дополнительные варианты находятся на странице группы
> http://groups.google.com/group/ror2ru?hl=ru


--
Всегда Ваш, Илья Плотников

Alex Dmitriev

unread,
Jan 13, 2012, 2:28:51 PM1/13/12
to ror...@googlegroups.com
> 1) я бы вообще не стал ориентироваться на флеш-сокеты. Нафиг они
> нужны, если есть long-poll

Согласен на 100%

> 2) к чему опрашивать 100 раз в секунду что-то? Это очень жестокая
> вещь. Если хочется push, то надо ставить что-то, что делает push.

Это пока в тестовом окружении. На моем буке redis вывозит порядка
7000+ опросов в секунду (через ruby-клиент) - вполне достаточно для
тестирования.

Для рабочего окружения нужная какая-то очередь заданий с мало-мальской
обработкой отвалившихся обработчиков (фэйлы, рестарты и прочее). Тот
же редис умеет pub-sub, но очередь сообщений нигде не хранится и при
фэйле воркера все сообщения успешно теряются. Это можно обрабатывать,
но пока это все на стадии эксперимента - не хочется заморачиваться.

Сегодня буквально наткнулся на сравнение производительности разных
очередей. Может кому будет полезно:

http://hiramchirino.com/blog/2011/12/stomp-messaging-benchmarks-activemq-vs-apollo-vs-hornetq-vs-rabbitmq/

Alexey Petrushin

unread,
Feb 2, 2012, 1:31:27 PM2/2/12
to ror...@googlegroups.com
Если кто думает писать сервер на nodejs, может будет интересно, я портировал Model для MongoDB с руби на ноду (использую ее сам но пока еше все новое и могут быть ошибки :) ).

Также, по поводу предубеждений против ноды, коллбек-хелла в частности. В чистом виде понятно получается жопа, с control-flow хелперами получается жопа чуть поменьше, но всеравно, писать стейт-машин на каздые 5 строчек кода очень сложно. К счастью есть еше вариант - fibers, в тех случаях где они применимы получается 1в1 Руби код (а они применимы по-моему для 90% кода, так что получается совсем неплохо).
Второе опасение - как это все отлаживать, отлаживать сложнее чем руби-код, но к счастью ненамного.

Собственно модель http://alexeypetrushin.github.com/mongo-model

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

EXO

unread,
Feb 2, 2012, 9:49:58 PM2/2/12
to RubyOnRails to russian

On 13 янв, 13:07, Alex Dmitriev <rene.dek...@gmail.com> wrote:
> Вы своим вопросом меня замотивировали дописать таки давно валявшийся
> блогопост про наши эксперименты с разработкой нового игрового сервера
> :) Надеюсь, окажется полезным:
> http://railorz.ru/articles/156-evented-game-server/

Эклектичненько, на мой взгляд. Хотя работать должно.
Я бы сразу ушел на Erlang. Там идеология в точности соответствует
задаче, а в Yaws "из коробки" поддержаны вебсокеты...

Alex Dmitriev

unread,
Feb 3, 2012, 1:31:56 AM2/3/12
to ror...@googlegroups.com
Я может быть просто сильно избалован ruby, но синтаксис эрланга мне
показался настолько инопланетянским, что даже как-то не возникло
желания писать на нем какую-то игровую логику. Я почти наверняка
просто-напросто не въехал в тему, поэтому если есть какие-то примеры
кода на Erlang не инфраструктурного характера (http-парсеры,
видеостримеры и прочее не в счет), а больше касающиеся бизнес-логики -
буду признателен за ссылки

3 февраля 2012 г. 7:49 пользователь EXO <alex...@gmail.com> написал:

Reply all
Reply to author
Forward
0 new messages