Вопрос по node.js, javascript – Отправить сообщение с сервера клиенту с помощью dnode

6

Пару месяцев назад я обнаружил nowjs и dnode и, наконец, использовал nowjs (иhttps://github.com/Flotype/nowclient) для двунаправленной связи клиент / сервер.

nowclient разрешает обмен данными nowjs между процессами двух узлов (а не между процессом узла и браузером для nowjs из коробки). Затем я смог отправить данные с клиента на сервер и с сервера на клиент. Теперь я использую узел 0.6.12, и довольно сложно использовать узел 0.4.x для запуска клиента.

Я ближе знакомлюсь с dnode, и я не совсем уверен, как работает связь между сервером и клиентом. Возможно ли, что сервер отправляет прямое сообщение клиенту? Идея состоит в том, чтобы клиент регистрировался на сервере (при первом подключении) и позволял серверу связываться с клиентом, когда это необходимо.

Из того, что я понимаю, вызов метода на сервере возможен, если клиент сначала запросил что-то с сервера. Это верно ?

Ваш Ответ

1   ответ
11

поэтому любая из сторон может определять функции, которые может вызывать противоположная сторона. Есть 2 основных подхода, которые вы можете использовать.

Первый способ - определить функцию регистрации на стороне сервера и передать обратный вызов от клиента.

server:

var dnode = require('dnode');

dnode(function (remote, conn) {
    this.register = function (cb) {
        // now just call `cb` whenever you like!
        // you can call cb() with whichever arguments you like,
        // including other callbacks!

        setTimeout(function () {
            cb(55);
        }, 1337);
    };
}).listen(5000)

client:

var dnode = require('dnode');

dnode.connect('localhost', 5000, function (remote, conn) {
    remote.register(function (x) {
        console.log('the server called me back with x=' + x);
    });
});

или вместо этого вы можете напрямую вызывать клиента с сервера симметричным образом после завершения обмена методами:

server:

var dnode = require('dnode');

dnode(function (remote, conn) {
    conn.on('ready', function () {
        remote.foo(55);
    });
}).listen(5000);

client:

var dnode = require('dnode');
dnode(function (remote, conn) {
    this.foo = function (n) {
        console.log('the server called me back with n=' + n);
    };
}).connect('localhost', 5000);
Error: User Rate Limit Exceeded Luc
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded Luc

Похожие вопросы