Socketstream (0.3) путаница кода на стороне сервера - PullRequest
0 голосов
/ 26 марта 2012

Я пытаюсь точно понять, где и как я должен реализовать серверный код node.js / socketstream, который выполняется независимо от клиентских вызовов RPC. В качестве простого примера я пытаюсь установить регулярное обновление часов для подключенных клиентов, используя что-то вроде этого на стороне сервера:

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 не существует (может быть, пока клиент не подключен?). Я потерялся. Любая помощь приветствуется; надеюсь, это было ясно.

Ответы [ 2 ]

1 голос
/ 26 марта 2012

Да, вы можете поместить этот код в свои действия, ничто не мешает вам, но лучше поместить его в файл 'app.js'.

Чтобы получить доступ к внутреннему API из app.js (тот, который отправляется в файлы / server / rpc action), использует ss.api

Следовательно, вам нужно будет позвонить:

ss.api.publish.all()

из вашего файла app.js.

Извините, это не было задокументировано ранее.Я скоро обновлю документы.

Оуэн

0 голосов
/ 26 марта 2012

Не знаю, соответствует ли оно стандартам кодирования, но это, вероятно, работает:

/ server / rpc / demo.js

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

Когдачитая документы, я думаю, что вы можете злоупотреблять действиями практически во всем, а не только в ответах RPC.

...