使用Meteor将数据从服务器流式传输到客户端:

Kic*_*867 5 javascript client-server meteor

我正在使用Meteor开发基于文本的冒险游戏,我遇到了如何处理某些元素的问题.即,如何在没有客户端任何输入的情况下将数据从服务器发送到客户端.

这个想法是,当玩家与怪物进行战斗时,战斗损坏和更新玩家和怪物对象将在服务器上循环发生.当玩家受到伤害时,它应相应地更新客户端UI.发布/订阅是否可以这样?

我基本上想要一些东西,并且从服务器监听事件以相应地更新战斗日志.

在伪代码中,这是我正在寻找的东西:

// 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
    }
});
Run Code Online (Sandbox Code Playgroud)

我知道你可以将一个集合发布到客户端,但这并不是我正在寻找的函数的特定内容,我不想将整个Player对象发布到客户端,我只是想告诉客户端在文本框中写一行,上面写着"你被怪物击中了12点伤害!".

我希望有一个类似于SocketIO的功能,如果我愿意的话,只需向客户端发出一个事件,告诉它更新UI.如果我需要的话,我想我可以使用SocketIO,但人们似乎坚持认为这样的事情完全没有SocketIO就可以使用Meteor,我只是不明白怎么做.

我在这种情况下看到的唯一出局是:编写所有游戏逻辑客户端,感觉这是一个坏主意,将所有战斗日志写入一个似乎非常过分的集合(但可能不是?),或使用一些一种SocketIO类型工具,只是向客户端发出消息,告诉它写一个新行到文本框.

c.c*_*ier 1

使用 Meteor 创建战斗日志集合似乎是最简单的选择。您只能监听added事件,然后在战斗结束时清除集合。它应该是这样的:

var cursor = Combat_Log.find();
var handleCombatLog = cursor.observe({
  added: function (tmp)
  {
    // do your stuff
  }
});
Run Code Online (Sandbox Code Playgroud)

我在这里问了类似的问题,希望这会有所帮助^^