- PVSM.RU - https://www.pvsm.ru -
В данной статье я расскажу, как в браузере организовать передачу данных в реальном времени в обе стороны. Для этого мы будем использовать Node.js и библиотеку Socket.IO.
Socket.IO — JavaScript библиотека для веб-приложений и обмена данными в реальном времени. Состоит из двух частей: клиентской, которая запускается в браузере и серверной для node.js. Оба компонента имеют похожее API.
На Хабре уже была опубликована статья «Создаем чат на Node.js и Socket.IO» [1], но с того времени библиотека изменила API и пример из публикации не работает на свежей версии (на момент написания статьи версия Socket.IO 1.2.1).
Сейчас, чтобы быть кратким, просто организуем приём и отправку информации.
Для чего это вообще нужно?
Я же просто написал простой мультиплеерный 3D шутер.
Установим Node.js, как это сделать можно прочитать тут [3].
Модуль легко установить, используя менеджер npm:
npm install socket.io
После создадим файл socket.js и пишем в него код:
var io = require('socket.io');
var http = require('http');
var app = http .createServer();
var io = io.listen(app);
app.listen(80);
io.sockets.on('connection', function (socket) {
socket.on('eventServer', function (data) {
console.log(data);
socket.emit('eventClient', { data: 'Hello Client' });
});
socket.on('disconnect', function () {
console.log('user disconnected');
});
});
Создадим socket.html и в него пишем:
<html>
<head>
<title>Test socket.io</title>
<script src="https://cdn.socket.io/socket.io-1.2.1.js"></script>
<script>
var socket = io.connect('http://localhost');
socket.on('eventClient', function (data) {
console.log(data);
});
socket.emit('eventServer', { data: 'Hello Server' });
</script>
</head>
<body>
</body>
</html>
Запускаем socket.js в Node.js и socket.html в браузере.
При загрузке страницы на локальный сервер будет отправленно сообщение {data: 'hello Server'}. На что сервер ответит {data: «Hello Client»}.
Оба сообщения можно увидеть в окне node js и в консоли JavaScript браузера соответственно.
Клиентская библиотека сама определяет, какой тип связи использовать для потоковой передачи данных и выбирает лучший из:
В данном примере сообщение отправляется только тому клиенту, который отправил запрос, что бы отправить сообщение всем ипользуйте:
// отправить текущему сокету сформировавшему запрос (туда откуда пришла)
socket.emit('eventClient', "this is a test");
// отправить всем пользователям, включая отправителя
io.sockets.emit('eventClient', "this is a test");
// отправить всем, кроме отправителя
socket.broadcast.emit('eventClient', "this is a test");
// отправить всем клиентам в комнате (канале) 'game', кроме отправителя
socket.broadcast.to('game').emit('eventClient', 'nice game');
// отправить всем клиентам в комнате (канале) 'game', включая отправителя
io.sockets.in('game').emit('eventClient', 'cool game');
// отправить конкретному сокету, по socketid
io.sockets.socket(socketid).emit('eventClient', 'for your eyes only');
Источник: github.com/Automattic/socket.io/wiki [5]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/pesochnitsa/79272
Ссылки в тексте:
[1] «Создаем чат на Node.js и Socket.IO»: http://habrahabr.ru/post/127525/
[2] тут: http://socket.io/demos/computer/
[3] тут: https://github.com/joyent/node/wiki/Installation
[4] Скачать файлы примера: https://yadi.sk/d/XLFsiu74dnzEt
[5] github.com/Automattic/socket.io/wiki: https://github.com/Automattic/socket.io/wiki
Нажмите здесь для печати.