Вопрос по node.js, comet, connect – Как я могу вызвать функцию JavaScript в браузере клиента со стороны сервера NodeJS?

4

Я программирую на стороне сервера NodeJS, я хочу вызвать функцию JavaScript на стороне браузера клиента. Надеюсь, я могу время от времени вызывать функции на стороне браузера клиента со стороны сервера, как будто я просто вызываю функцию на стороне сервера.

Есть ли какая-то форма, комета или RPC, которые могут это сделать?

Вы'ищем Socket.io. SLaks

Ваш Ответ

4   ответа
3

но вместо этого использовал Faye. Фэй, вероятно, немного больше функциональности, чем вы хотите, но этоЭто так легко настроить и использовать. Я нашел это более интуитивным, чем Socket.IO. Не то, чтобы Socket.IO выглядел жестким, но Фэй выглядела проще.

Вот сайт:

http://faye.jcoglan.com/

Также есть группа пользователей Google, и автор ответил на пару моих запросов.

Вам понадобится следующий код:

Сторона узла:

var faye = require('faye');
var faye_server = new faye.NodeAdapter({mount: '/faye', timeout: 120});

console.log('Firing up faye server. . . ');
faye_server.listen(8089);

//send message out every 1 second
setInterval( function()
{   
    var currentTime_secsSinceEpoch = new Date().getTime() / 1000;

    faye_server.getClient().publish('/heartbeat', 
    {
        pageName: 'app.js',
        timeMessageSent_secs_since_epoch: currentTime_secsSinceEpoch,
        iFrame1CycleCount: iFrame1CycleCount

    });
}, 1000);

Сторона браузера:

<script type="text/javascript">
//create faye client
var faye_client = new Faye.Client('http://127.0.0.1:8089/faye');

var faye_message_subscription = faye_client.subscribe('/heartbeat', function(message)
{   
    //record the time message was received
    var receiveTime_secSinceEpoch = new Date().getTime() / 1000;

    console.log("Got heartbeat at " + receiveTime_secsSinceEpoch + "with a delay of " +
        receiveTime_secsSinceEpoch - message.currentTime_secsSinceEpoch + " secs");
    //Do something else important here!!
}
</script>

Тот'сидеть! Теперь каждый раз, когда ваш сервер отправляетстук сердца' сообщение, ваша веб-страница вызовет указанную нами функцию и выдаст сообщение на консоль. Смертельно просто.

У Фэй есть много других интересных функций, которые вы, возможно, захотите использовать, но я думаю, это в основном то, что вам нужно.

Вы можете присоединить Faye к экспресс-серверу в узле слишком легко, что делает его действительно хорошо работающим с веб-сервером.

Я бы, наверное, использовал Фэй. Phil
0

ез веб-сокет, которое позволяет отправлять данные с любой стороны на другую после того, как было установлено одно начальное соединение. Socket.IO имеет много резервных методов, которые он использует, если веб-сокет не разрешен для пользователя.браузер

Таким образом, вы можете добавить связыватель событий в свой код на стороне клиента, который будет реагировать на любые данные, отправляемые со стороны сервера nodejs, и, таким образом, вы можете выполнять функцию на стороне клиента с самого сервера.

Но если вы ищете что-то, что вы определяете функцию на стороне клиента, и вы можете напрямую вызывать ее из nodejs, то вы ошибаетесь. Хотя они оба javascript, но они совершенно разные с точки зрения исполнения. NodeJs - это javascript на стороне сервера, а не для обоих сразу. Но все же, как я уже сказал выше, вы можете выполнять функции на стороне клиента, используя Socket.IO и средства привязки событий.

2

for_client» в этом случае), который клиент слушает и устанавливает слушателя для событий на стороне клиента ("for_server» в этом случае). Может быть любое количество событий, и они могут иметь обратный вызов, который можно использовать для вызова методов.

var io = require('socket.io').listen(80);

io.sockets.on('connection', function (socket) {
  socket.emit('for_client', { someData: 'if necessary' });
  socket.on('for_server', function(data) {
     doSomethingServerSide(data);
  });
});

function doSomethingServerSide(data){ console.log(data); }

На стороне клиента

<script src="/socket.io/socket.io.js"></script>
<script>
  var socket = io.connect('http://localhost');
  socket.on('for_client', function (data) {
    console.log(data);
    socket.emit('for_server', { data: 'data' });
  });
</script>
0

Socket.IO позволит вам установить постоянную связь между node.js и интерфейсным JS.

Вы можете отправлять сообщения и подписываться на любые другие сообщения с обеих сторон. Так как это двунаправленная связь, вам не нужны какие-либо запросы / ответы, просто излучайте их с любой стороны, и они будут кэшироваться с помощью обратного вызова с другой стороны.

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