![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|
|
|||||
|
Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
|
Допустим, есть на 90% готовое приложение, и при начале работы над приложением никаких online-действий не планировалось. Поэтому сервер собран на связке php/memcache/mysql, обмен реализован по http, сервер отдает xml. Все более-менее работает и объективной потребности в переходе на сервер другой архитектуры нет.
Неожиданно в игру вводится новый функционал, а именно - пользователь, находясь в своей локации, может производить некоторые действия в отношении другого пользователя, которые тут же должны отражаться в его локации. Например, он выпускает в локацию второго пользователя "бандитов", которые там грабят ресурсы. Требует решения ситуация, когда второй пользователь находится в игре. Можно заставить клиента лазить на сервер по таймауту (но с маленьким таймаутом имеем большую дополнительную нагрузку на сервер, а с большим - теряем online), а можно запустить "маленький сокет-сервер" на java , единственное назначение которого будет в том, чтобы "дернуть" клиента, чтобы тот, в свою очередь залез на сервер и обновил свои данные. Кто-нибудь так делает? |
|
|||||
|
Регистрация: Aug 2009
Адрес: UTC+2
Сообщений: 353
|
поднимается слушающий сокет на серванте.
клиенты цепляются к нему fulltime. каждый раз, когда это необходимо, сервер шлет по трубе команду клиенту, тот в зависимости от команды выполняет определенные действия. например, запрашивает на серваке данные. ничего зазорного в этом нет и это самый быстрый и не ресурсоемкий способ |
|
|||||
|
Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
|
ок
так и сделаю |
|
|||||
|
Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
|
Еще возник вопрос по итогам ввода в эксплуатацию указанного зоопарка.
Сейчас организовано таким образом: Приложение работает с сервером на php/memcache/mysql. Собственно, это немного производства и отправка поездов со своей станции на другие станции. Когда пользователь со станции внутри своего клиента отправляет поезд на станцию внутри другого клиента, то происходит обновление информации о местоположении поезда в базе, после чего клиенту, на который прибывает поезд, отправляется через сокет-сервер команда обновить поезда на своей станции, он лезет в базу и показывает у себя прибывающий поезд. Поскольку это не реалтайм, временные издержки приемлемые. Обращение с базой реализуется исключительно на php, сокет-сервер на java работает в режиме маршрутизатора сообщений. Возникла необходимость инициировать отправку сообщений на клиенты с требованием обновить контент у себя после обновления базы со стороны php. По списку, который сформирован по итогам обновления базы. Умом понимаю, что можно доработать сокет-сервер, чтобы эту модификацию базы выполнял он сам, тогда и вопрос рассылки решится элементарно, но может есть способ проще? Размерность списка идентификаторов для рассылки сообщений, думаю, в пределах 1000. |
|
|||||
|
Регистрация: Aug 2009
Адрес: UTC+2
Сообщений: 353
|
от не совсем врубился в проблему
![]()
__________________
Trapatatupatupa |
|
|||||
|
Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
|
по крону запускается php-скрипт, модифицирующий базу.
по итогам модификации возникает список модифицированных локаций (список userID) этот список надо как-то передать сокет-серверу на java, чтобы он разослал клиентам по этому списку команду на обновление своих данных естественно, рассылать нужно тем, кто в онлайне, но сокет-сервер это как раз знает фактически, мне нужен, как подозреваю, сокет-клиент на php, который приконнектился бы к сокет-серверу на java Последний раз редактировалось mikhailk; 07.05.2010 в 16:00. |
|
|||||
|
Регистрация: Aug 2009
Адрес: UTC+2
Сообщений: 353
|
а есть возможность заставить сокет-сервер (модифицировать его код) генерить список модифицированных локаций (список userID) ?
__________________
Trapatatupatupa |
|
|||||
|
Регистрация: Aug 2008
Сообщений: 258
|
По-моему проще сделать что бы java-сервер сам это делал. Просто модуль прикрутить, который лез бы в базу и делал что ему там надо. Поставить там какой-нибудь механизм, что модуль выполнялся в какое-то определённое время..
Ну или да, сокет-клиент на php ... который бы запускался cron'ом, лез в базу, подключался к java-серверу и делал что ему нужно.. но это что-то очень странное.. |
|
|||||
|
Переходите полностью на сокеты. Стояла такая же проблема недавно - обмозговав, перешли на сокеты. Сейчас вы потратите время соединяя эту проблему, завтра снова будет проблема, послезавтра ещё одна и т.д. Проще сделать сразу правильно.
__________________
Тут мужик танцует и поёт про флэш |
|
|||||
|
Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
|
да-да
![]() это я уже понял следующее приложение будет стоять на сокет-сервере целиком В данном случае действительно разумнее перенести процедуру апдейта базы в сокет-сервер. Серверу MySQL, полагаю, все равно, кто в него лазит? Crenth, список модифицированных локаций генерит как раз php-скрипт. Он мог бы класть, конечно, его в мемкэш, а сокет-сервер периодически через другой копеечный скрипт забирал бы из мемкеша этот список и обнулял бы его... Но так тоже какие-то костыли получаются. ![]() |
![]() |
![]() |
Часовой пояс GMT +4, время: 20:51. |
|
|
« Предыдущая тема | Следующая тема » |
|
|