0

我试图准确了解我应该在哪里/如何实现独立于客户端 rpc 调用运行的 node.js/socketstream 服务器端代码。作为一个简单的例子,我试图在服务器端使用类似这样的东西将定期时钟更新推送到连接的客户端:

var pushTime = function() {
    d = new Date();
    ss.publish.all('newServerTime', d);
    return;
};

setInterval(pushTime, 1000);

并设置客户端订阅该发布事件,如下所示:

ss.event.on('newServerTime', function(time) {
    return $('#serverTime').val(time);
});

问题:我在哪里放置/执行服务器端 pushTime 函数?文档建议使用 /server/rpc 树,因此我将其放在 /server/rpc/demo.js 中,但这会产生此错误:

ReferenceError: ss 未定义

请注意,我没有将代码放在 export.actions 块中;我相信这仅适用于客户端 rpc 调用。

我尝试在文件顶部设置 ss :

ss = require('socketstream');

但这肯定是错误的——现在“publish.all”方法不存在。

我尝试将代码放在 app.js 的底部,就在 ss.start 调用之后。再次说明 publish.all 方法不存在(可能直到连接了客户端?)。我迷路了。任何帮助表示赞赏;希望这很清楚。

4

2 回答 2

1

是的,您可以将该代码放入您的操作中,没有什么可以阻止您,但最好将其放入您的“app.js”文件中。

要从 app.js(发送到 /server/rpc 操作文件的那个)访问内部 API,请使用 ss.api

因此,您需要致电:

ss.api.publish.all()

从您的“app.js”文件中。

抱歉,这之前没有记录。我会尽快更新文档。

欧文

于 2012-03-26T12:49:24.757 回答
0

不知道它是否符合编码标准,但这可能有效:

/server/rpc/demo.js

exports.actions = function(req, res, ss) {
    setTimeout(function () {
        ss.publish.all("newServerTime", new Date());
    }, 1000);
}

在阅读文档时,我认为您可以对几乎所有内容滥用操作,而不仅仅是 RPC 响应。

于 2012-03-26T12:27:06.680 回答