Продолжим совместный разбор-изучение ноды. В этот раз разберем использования модуля socket.io, который реализует принцип сокетного взаимодействия между клиетом и сервером.
При установленной ноде и менеджере пакетов, поставить модуль socket.io не составит труда – пишем простую команду:
npm install socket.io
Скачаем саму библиотеку в рабочую директорию с github, отсюда. Поместим ее в каталог socket.io.
На оф сайте есть примеры использования, один из них и разберем:
var app = require('http').createServer(handler) , io = require('socket.io').listen(app) , fs = require('fs') app.listen(80); function handler (req, res) { fs.readFile(__dirname + '/index.html', function (err, data) { if (err) { res.writeHead(500); return res.end('Error loading index.html'); } res.writeHead(200); res.end(data); }); } io.sockets.on('connection', function (socket) { socket.emit('news', { hello: 'world' }); socket.on('my other event', function (data) { console.log(data); }); });
Последовательно посмотрим что происходит:
var app = require('http').createServer(handler) , io = require('socket.io').listen(app) , fs = require('fs') app.listen(80);
Подкючаем необходимые модули в том числе и socket.io. Ставим на прослушку 80ты порт, если он занят – можно любой другой свободный – я у себя поставил на 83.
function handler (req, res) {
Функция handler присутствует тут “для мебели” и особого отношения к сокетам не имеет, но она поможет нам запустить пример и отдать пользователю html страничку.
io.sockets.on('connection', function (socket) {
Открываем соединение. Вторым параметром идет callback функция, которая параметром принимаем ссылку socket на конкретное подключение.
socket.emit('news', { hello: 'world' });
Передаем на клиент данные(а именно объект { hello: ‘world’ } ) в потоке ‘news’.
socket.on('my other event', function (data) { console.log(data); });
Принимаем с клиента данные в потоке ‘my other event’ и выводим в консоль.
С серверной частью разобрались, теперь посмотрим на код на стороне клиента, который мы поместим в файле index.html:
<script src="/socket.io/socket.io.js"></script> <script> var socket = io.connect('http://localhost'); socket.on('news', function (data) { console.log(data); socket.emit('my other event', { my: 'data' }); }); </script>
Тут все еще проще:
<script src="/socket.io/socket.io.js"></script>
Подключаем библиотеку, именно таким способом: запрашиваем ее со стороны сервера, где она динамически генерируется. Не стоит пытаться ее скачать уже скомпилированную.
var socket = io.connect('http://localhost');
Открываем соединение, вместо ‘localhost’ тут понятно дело может быть имя вашего хоста или просто IP адрес. Также если вы меняли номер порта стоит его указать, например localhost:83.
socket.on('news', function (data) { console.log(data);
Читаем данные из потока ‘news’ (они нам передаются параметром data в callback функции) и выводим их в консоль.
socket.emit('my other event', { my: 'data' });
Передаем серверу данные в поток ‘my other event’.
Ну вот и все: запускаем наш http://localhost и смотрим в консоль.
* Вывод в консоль идет с помощью метода consol.log: в обычную консоль на стороне сервера и в консоль браузера(например FireBug для FireFox) – для клиента.