Я разрабатываю текстовую приключенческую игру с Meteor, и у меня возникает проблема с обработкой определенных элементов. А именно, как передавать данные с сервера на клиент без какого-либо ввода от Клиента.Поток данных с сервера на клиента с помощью Meteor:
Идея состоит в том, что когда игрок участвует в бою с монстром, боевой урон и обновление объектов Player и Monster будут возникать в цикле на сервере. Когда игрок получает урон, он должен соответствующим образом обновлять клиентский интерфейс. Как это возможно с публикацией/подпиской?
Я в основном хочу что-то, что сидит и слушает события с сервера, чтобы соответственно обновить журнал боя.
В псевдо-коде, это что-то вдоль линии, что я ищу:
// Client Side:
Meteor.call("runCommand", "attack monster");
// Server Side
Meteor.methods({
runCommand: function(input) {
// Take input, run the loop to begin combat,
// whenever the user takes damage update the
// client UI and output a line saying how much
// damage the player just received and by who
}
});
Я понимаю, что вы можете опубликовать коллекцию клиенту, но это не совсем так специфичного для функцию, которую я ищу, я не хочу публиковать весь объект Player для клиента, я просто хочу сказать клиенту написать строку в текстовое поле, в котором говорится что-то вроде «На вас нанесли 12 урона от монстра! ».
Я надеялся, что существует функция, похожая на SocketIO, где я мог бы, если бы захотел, просто передать событие клиенту, сообщая ему об обновлении пользовательского интерфейса. Я думаю, что я могу использовать SocketIO для этого, если мне это нужно, но люди, казалось, были непреклонны, что что-то вроде этого было вполне возможно с помощью Meteor без SocketIO, я просто не понимаю, как это сделать.
Единственный выход, который я вижу в этом сценарии: написать всю логическую клиентскую логику, которая выглядит как плохая идея, записывая все боевые журналы в коллекцию, которая кажется чрезвычайно чрезмерной (но, возможно, это не так?). , или используя какой-то инструмент типа SocketIO, чтобы просто отправлять сообщения клиенту, чтобы сообщить ему написать новую строку в текстовое поле.
Я не думаю, что записи в коллекции является чрезмерным на всех , но я не слишком хорошо знаком с интерьерами метеор. Мое понимание заключается в том, что только синхронизация синхронизируется с клиентами, поэтому, если вы просто добавляете или обновляете документ в коллекции, это все, что будет синхронизировано. Поскольку коллекции, насколько мне известно, являются единственными данными, которые синхронизируются между клиентом и сервером, я не думаю, что есть другие варианты в собственном метеоре (кроме опроса). –
[Метеорные потоки] (http: //arunoda.github.io/meteor-streams /) пакет больше не поддерживается, но это действительно хороший способ достижения такого рода функциональных возможностей и все еще работает хорошо. – richsilv
Я действительно не мог заставить метеоритные потоки работать. Я установил его с предоставленной командой терминала, а затем скопировал и вставил пример в мой код. Я вижу объект, который создается, но фактические методы «emit» и «on» не имеют абсолютно никакого ответа. Он никогда не запускает событие «on message». – Kich867