Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Серверные технологии и Flash (http://www.flasher.ru/forum/forumdisplay.php?f=62)
-   -   "Зоопарк" на сервере - насколько это криминально? (http://www.flasher.ru/forum/showthread.php?t=139143)

mikhailk 24.04.2010 11:56

"Зоопарк" на сервере - насколько это криминально?
 
Допустим, есть на 90% готовое приложение, и при начале работы над приложением никаких online-действий не планировалось. Поэтому сервер собран на связке php/memcache/mysql, обмен реализован по http, сервер отдает xml. Все более-менее работает и объективной потребности в переходе на сервер другой архитектуры нет.

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

Требует решения ситуация, когда второй пользователь находится в игре. Можно заставить клиента лазить на сервер по таймауту (но с маленьким таймаутом имеем большую дополнительную нагрузку на сервер, а с большим - теряем online), а можно запустить "маленький сокет-сервер" на java , единственное назначение которого будет в том, чтобы "дернуть" клиента, чтобы тот, в свою очередь залез на сервер и обновил свои данные.

Кто-нибудь так делает?

Crenth 24.04.2010 20:15

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

mikhailk 24.04.2010 22:48

ок
так и сделаю

mikhailk 07.05.2010 13:03

Еще возник вопрос по итогам ввода в эксплуатацию указанного зоопарка.

Сейчас организовано таким образом:

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

Обращение с базой реализуется исключительно на php, сокет-сервер на java работает в режиме маршрутизатора сообщений.

Возникла необходимость инициировать отправку сообщений на клиенты с требованием обновить контент у себя после обновления базы со стороны php. По списку, который сформирован по итогам обновления базы.

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

Размерность списка идентификаторов для рассылки сообщений, думаю, в пределах 1000.

Crenth 07.05.2010 13:46

от не совсем врубился в проблему :(

mikhailk 07.05.2010 15:41

по крону запускается php-скрипт, модифицирующий базу.
по итогам модификации возникает список модифицированных локаций (список userID)
этот список надо как-то передать сокет-серверу на java, чтобы он разослал клиентам по этому списку команду на обновление своих данных

естественно, рассылать нужно тем, кто в онлайне, но сокет-сервер это как раз знает

фактически, мне нужен, как подозреваю, сокет-клиент на php, который приконнектился бы к сокет-серверу на java

Crenth 07.05.2010 16:47

а есть возможность заставить сокет-сервер (модифицировать его код) генерить список модифицированных локаций (список userID) ?

membrilius 07.05.2010 16:52

По-моему проще сделать что бы java-сервер сам это делал. Просто модуль прикрутить, который лез бы в базу и делал что ему там надо. Поставить там какой-нибудь механизм, что модуль выполнялся в какое-то определённое время..

Ну или да, сокет-клиент на php ... который бы запускался cron'ом, лез в базу, подключался к java-серверу и делал что ему нужно.. но это что-то очень странное..

Psycho Tiger 07.05.2010 16:59

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

mikhailk 07.05.2010 18:44

да-да :)
это я уже понял
следующее приложение будет стоять на сокет-сервере целиком

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

Crenth, список модифицированных локаций генерит как раз php-скрипт. Он мог бы класть, конечно, его в мемкэш, а сокет-сервер периодически через другой копеечный скрипт забирал бы из мемкеша этот список и обнулял бы его... Но так тоже какие-то костыли получаются. :)


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

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