|
|
Модератор форума: Dimitro, LightInDarkness |
Форум Web раздел Web форум Необходима консультация по отправке внутриигровой почты. (Желающие потроллить, пожалуйста, проходите мимо.) |
Необходима консультация по отправке внутриигровой почты. |
Добрый день, уважаемые форумчане. Подскажите пожалуйста правилен ли ход моих мыслей?
Мне необходимо отправить игроку письмо с вложенным внутри предметом. Для этого я собираюсь произвести средствами PHP два запроса в таблицы `mail` и `mail_items`. В первом из которых я заполню необходимые данные по самому письму, а во втором данные по вложению соответственно. Если игрок в момент отправки письма будет находиться в сети, то он его получит только при повторном входе в игру, следовательно необходимо будет еще добавить проверку на онлайн. В итоге, когда игрок не в сети, он нажимает волшебную кнопку и когда уже заходит в игру в почтовом ящике его ждет заветное письмо с вложенным внутри предметом. Нигде не ошиблась? P.S. Убедительная просьба, не отпускайте различных шуточек на данную тему и не стройте из себя всезнайку, просто помогите советом. Сразу говорю, метод с SOAP меня не устраивает и ничего более менее толкового на форуме я не нашла, хотя и потратила на это почти полчаса. |
А к чему проверка по онлайну?
На самом то деле, не очень то и важно, в игре игрок или нет, ему просто придется перезайти в игру. И почему СОАП вас не устраивает? Хламить поток он все равно не будет - расположен он у вас на сервере. Если вне сервера - тогда понятно. А так - да, все верно. |
Ну, во-первых.. У меня на машине - 25 разных айпи адресов. Так что это не показатель. Во-вторых - соап пакетно передает данные в сервер, а значит, единственное что может случится - это загруз канала при огромном сбыте.. Но я не думаю, что у вас будут проблемы поменять канал, если его сможет загрузить именно личный кабинет с магазином =D Там буквально отправка команды. можно даже посчитать, сколько байт информации будет передаваться в среднем соапу. Не думаю, что больше 50 байт соап будет грузить за запрос. Не думаю, что это особо такая проблема...
Сообщение # 4 написано 10.08.2015 в 17:11
|
Pallam, помимо лишней нагрузки, как я поняла ничтожной, меня смущает необходимость загрузки и установки дополнительно ПО на сервер для работы SOAP. Мне крайне это не нравится, поэтому хотелось бы реализовать все средствами SQL запросов. Считаете, что все таки лучше использовать SOAP?
|
Pallam, таким образом я смогу реализовать и отдельную систему для администрирования игрового мира, используя ряд команд для ГМ, верно? Что под этим имеется в виду? Да, можно использовать гм/консольные команды от имени сервера. Если стоит опр. модификация. Если есть знание и желание - то весь этот список можно вечно дополнять.
Сообщение # 8 написано 10.08.2015 в 20:39
|
При работе сервера(нужного мира/реалма) такие изменения как отсылка писем с вложенными предметами нужно делать через СОАП и только через СОАП. При отключенном игровом сервере (мире/реалме) Отсылку надо осуществлять уже через базу, так как СОАП не сработает (сервер то отключен). Так что реализовывать надо ОБА способа отсылки.
Чтобы это понять, надо хорошо разбираться не только в ПХП и МайСКЛ, но и в СИ, а так же структуре и методах работы ЯДРА сервера. Объясняю почему. При своей работе ядро сервера (по крайней мере старые его версии, такие как 3.3.5) абсолютно не знает что в базу данных пишет информацию не только оно одно, но еще и сайт. Поэтому в ядрах начисто отсутствуют проверки на то, что какие-то посторонние процессы могли внести изменения в базу без его ведома. К тому же, всё это усугубляется тем, что запись данных из памяти производится не моментально после изменения их, а с запаздыванием. Это конечно не относится к почте, но всякое может быть. При большом онлайне, и приличном потоке писем между пользователями может получится накладка. Вот примерно такая: два пользователя отправляют одновременно письмо. Первый - из игры. Второй - с сайта. оба прикрепляют к письму предмет. Так вот. И сервер и сайт, обращаясь к базе данных своим путём, получают уникальный идентификатор письма и прикрепленного предмета для отсылки. если в таблице mail этот id выдается автоматически МайСКЛ-ом при создании письма и он уникален, то id письма в таблице mail_items вносится по средствам запроса. получается, что эти два письма будут претендовать на один и тот же id. Отсюда вытекает ситуация, что один из пользователей получит письмо с ДВУМЯ предметами, а второй - или без вложений, или совсем не получит письма. Вот примерно так я вам могу коротко, на пальцах обрисовать смысл проблемы.
мне фиолетово какой у меня рейтинг, можете поставить хоть минус миллион...
Не в плюсах счастье... Помогаю тем, кто хочет чтобы ему помогли, а не сделали за него.
Сообщение # 10 написано 12.08.2015 в 22:09
|
И сервер и сайт, обращаясь к базе данных своим путём, получают уникальный идентификатор письма и прикрепленного предмета для отсылки. если в таблице mail этот id выдается автоматически МайСКЛ-ом при создании письма и он уникален, то id письма в таблице mail_items вносится по средствам запроса. получается, что эти два письма будут претендовать на один и тот же id. Отсюда вытекает ситуация, что один из пользователей получит письмо с ДВУМЯ предметами, а второй - или без вложений, или совсем не получит письма. Ну вот тут вы брешите, при чем жутко. Объясняю. При работе со скулями, мускуль, при правильном подходе - блокирует свою строку, пока ее полностью не обработает. Сервер тоже блокирует строку и при этом никто, кроме того, кто заблокировал не имеет доступа к оной. А значит при попытки одного переписать через права другого - пойдет лажа... Т.е. перезапись не состоится. Теперь номер два. INSERT ITEM бла-бла-бла-маил-темлейт (`id`, `bla-bla-bla`) VALUES ((SELECT MAX(`id`) FROM бла-бла-бла-маил-темлейт)+1, 'bla-bla-bla-value'); Фокус понятен? И третье. php if (server_is_online()) {mail_by_soap(char, item);} else {mail_by_sql(char, item);} Разжувал все идеально?
Сообщение # 11 написано 22.08.2015 в 17:34
|
Уважаемый Pallam, каждый видит проблему с высоты своих знаний и опыта. Я пишу о том что происходит на реальных серверах с реальным онлайном, человек в 50 и более. И если бы этой проблемы не существовало, то я бы и не написал об этом. Вы же голословно обвиняете меня во вранье, хотя сами даже не поняли смысл моей мысли. А смысл заключается в следующем:
При своей работе ядро сервера (по крайней мере старые его версии, такие как 3.3.5) абсолютно не знает что в базу данных пишет информацию не только оно одно, но еще и сайт. Поэтому в ядрах начисто отсутствуют проверки на то, что какие-то посторонние процессы могли внести изменения в базу без его ведома. т.е. виновником сей коллизии является само ядро сервера. Если вы не верите мне, то проанализируйте исходники ядра. Я только что специально посмотрел на код в файлах : Mail.cpp Mail.h ObjectMgr.cpp ObjectMgr.h Как и ожидалось, но всё остается по прежнему, как и 3-4 года назад. А именно, в файлах менеджера объектов при начале работы с очередным объектом из базы запрашивается куча необходимых данных. В том числе и номер последнего свободного MailId. Потом в файлах работы с почтой без всяких проверок, тупым инсертом добавляется информация об отправляемом письме. При этом, если вдруг письмо с этим MailId по каким-либо причинам уже существует, то оно будет перезаписано новой информацией. Если не верите, то можете сами узреть это в исходниках. Не буду вам мешать в этом увлекательном занятии. Теперь номер два. INSERT ITEM бла-бла-бла-маил-темлейт (`id`, `bla-bla-bla`) VALUES ((SELECT MAX(`id`) FROM бла-бла-бла-маил-темлейт)+1, 'bla-bla-bla-value'); Фокус понятен? это не фокус, а необходимость, которая должна быть в ядре, но этого там как раз и нет. И третье. php if (server_is_online()) {mail_by_soap(char, item);} else {mail_by_sql(char, item);} я как раз про это и написал, только не кодом, а словами: При работе сервера(нужного мира/реалма) такие изменения как отсылка писем с вложенными предметами нужно делать через СОАП и только через СОАП. При отключенном игровом сервере (мире/реалме) Отсылку надо осуществлять уже через базу, так как СОАП не сработает (сервер то отключен). Так что реализовывать надо ОБА способа отсылки. так что ничего нового вы не сказали. Лучше пожуй, точнее погрызи, исходники ядра. Пользы будет больше. Всего доброго приятно было полемизировать с вами.
мне фиолетово какой у меня рейтинг, можете поставить хоть минус миллион...
Не в плюсах счастье... Помогаю тем, кто хочет чтобы ему помогли, а не сделали за него.
Сообщение # 12 написано 23.08.2015 в 12:39
|
Нде, согласен, работа с базой меня серьезно напугала... Привык видеть lock таблиц, во время их работы...
Переписал на нормальную версию. Однако... Вся эта полемика была бесполезной. Да и особых знаний для того, что бы сделать отправку предмета почтой на самом то деле нет.
Сообщение # 13 написано 23.08.2015 в 16:31
|
| |||
| |||