1. Введение
Прежде всего, официальный сайт Socket.io: http://socket.io
Официальный веб -сайт очень краткий, и даже нет документации API, только простой «как использовать». Потому что Socket.io так же прост и прост в использовании, как и официальный сайт.
Так что же такое Socket.io? Socket.io-это библиотека WebSocket, которая включает JS-JS на стороне клиента и Nodejs на стороне сервера. Его цель-создать приложения в реальном времени, которые можно использовать в разных браузерах и мобильных устройствах. Он автоматически выберет лучший способ реализовать сетевое приложение в реальном времени на основе браузера из различных методов, таких как WebSocket, Ajax Long Offullie, потоковая передача IFRAME и т. Д., Что очень удобно и удобно для пользователя. Поддерживаемые браузеры столь же низки, как IE5.5, что должно соответствовать большинству потребностей.
2. Установка и развертывание
2.1 Установка
Прежде всего, установка очень проста, в среде Node.js, только одно предложение:
Кода -копия выглядит следующим образом:
npm установить сокет.io
2.2 Объединение экспресса для создания сервера
Express - это небольшая структура веб -приложения Node.js, которая часто используется при создании серверов HTTP, поэтому он напрямую объясняется с помощью Socket.io и Express в качестве примеров.
Кода -копия выглядит следующим образом:
var Express = require ('Express')
, app = express ()
, server = require ('http'). CreateServer (App)
, io = require ('socket.io'). Слушайте (сервер);
server.listen (3001);
Если вы не используете Express, пожалуйста, см.
3. Базовый метод использования
В основном он разделен на две части кода: на стороне сервера и клиентская сторона, оба из которых очень просты.
Сервер (app.js):
Кода -копия выглядит следующим образом:
// подключить приведенный выше код
app.get ('/', function (req, res) {
res.sendfile (__ dirname + '/index.html');});
io.sockets.on ('connection', function (ocket) {
socket.emit ('news', {hello: 'world'});
socket.on ('другое событие', function (data) {
console.log (data);
});
});
Во -первых, функция io.sockets.on принимает строку «соединение» как событие, в котором клиент инициирует соединение. Когда соединение успешно, функция обратного вызова с параметрами сокета вызывается. Когда мы используем socket.io, мы в основном обрабатываем запросы пользователей в этой функции обратного вызова.
Самая важная вещь в розетке - испускается и включена. Бывшие представляют (выпуска) событие (имя события представлено строкой). Имя события может быть настроено, и есть некоторые имена событий по умолчанию, за которым следует объект, указывающий содержимое, отправленное в сокет; Последнее получает событие (имя события представлено строкой), за которым следует функция обратного вызова, которая получает вызов события, где данные являются полученными данными.
В приведенном выше примере мы отправили новостное мероприятие и получили другое мероприятие, поэтому клиент должен иметь соответствующие события получения и отправки. Да, клиент -код точно противоположный и очень похож на сервер.
Клиент (client.js)
Кода -копия выглядит следующим образом:
<script src = "/socket.io/socket.io.js"> </script>
<Скрипт>
var socket = io.connect ('http: // localhost');
Socket.on ('news', function (data) {
console.log (data);
socket.emit ('другое событие', {my: 'data'});
});
</script>
Есть две вещи, чтобы отметить: путь ocket.io.js должен быть написан правильно. Этот файл JS фактически помещается в папку NODE_MODULES на стороне сервера. Он будет перенаправлен при запросе этого файла. Поэтому не удивляйтесь, что этот файл не существует на стороне сервера, но почему он все еще работает нормально. Конечно, вы можете скопировать файл Socket.io.io.io.io.io.js локально и сделать его файлом JS на стороне клиента, чтобы вам не приходилось обращаться к этому файлу JS с сервера узлов каждый раз, что повышает стабильность. Вторая точка состоит в том, чтобы использовать var socket = io.connect ('адрес веб -сайта или IP'); Чтобы получить объект сокета, а затем вы можете использовать сокет для отправки и получения событий. Что касается обработки событий, приведенный выше код означает, что после получения события «Новости» полученные данные напечатаны и событие «другое событие» отправляется на сервер.
ПРИМЕЧАНИЕ. Встроенное имя события по умолчанию, такое как «Отключение», означает, что подключение клиента отключается, «сообщение» означает, что сообщение получено и т. Д. Для пользовательских имен событий старайтесь не удвоить имя с именами событий по умолчанию, встроенным в Socket.io, чтобы не вызвать ненужные проблемы.
4. Другие распространенные API
1). Трансляция всем клиентам: socket.broadcast.emit ('вещательное сообщение');
2). Введите комнату (очень простой в использовании! Это эквивалентно пространству имен, которое можно транслировать в определенную комнату, не затрагивая клиентов в других комнатах или нет в комнате): Socket.join («Название вашей комнаты»);
3). Вещательное сообщение в комнату (отправитель не может получить сообщение): Socket.broadcast.to («Имя вашей комнаты»). EMIT («Сообщение о трансляции»);
4). Вещательные сообщения в комнату (включая отправителя могут получать сообщения) (этот API принадлежит io.sockets): io.sockets.in ('другое имя комнаты'). Emit ('Sportment Room Message');
5). PUST WebSocket Communication: (Client) socket.send ('hi'), (сервер) используйте socket.on ('message', function (data) {}) для получения.
5. Создайте чат с помощью Socket.io
Наконец, мы заканчиваем эту статью простым примером. Использование Socket.io для построения чата составляет около 50 строк кода, а эффект чата в реальном времени также очень хорош. Опубликованы следующие коды ключей:
Сервер (socketchat.js)
Кода -копия выглядит следующим образом:
// Словарь для клиентского соединения, когда клиент подключается к серверу,
// будет сгенерирован уникальный сокетд, и в словаре будет сопоставлено отображение сокета с информацией пользователя (прозвище и т. Д.)
var connectist = {};
exports.startchat = function (io) {
io.sockets.on ('connection', function (ocket) {
// Сохранить SocketId и имя пользователя при подключении клиента
var socketid = socket.id;
ConnectionList [socketId] = {
Гребень: розетка
};
// Пользователь вступает в событие чата и транслирует свое имя пользователя другим пользователям онлайн
socket.on ('join', function (data) {
socket.broadcast.emit ('froadcast_join', data);
connectist [socketid] .username = data.username;
});
// Пользователь покидает инцидент в чате и транслирует его отъезд другим онлайн -пользователям
socket.on ('dinnonnect', function () {
if (connectionList [socketId] .username) {
socket.broadcast.emit ('broadcast_quit', {
Имя пользователя: список ConnectionList [SocketId] .username
});
}
Удалить список соединения [SocketId];
});
// инцидент с речью пользователя, транслируйте содержание их речи для других онлайн -пользователей
socket.on ('say', function (data) {
socket.broadcast.emit ('broadcast_say', {
Имя пользователя: список ConnectionList [socketId] .username,
Текст: data.text
});
});
})
};
Клиент (socketchatclient.js)
Кода -копия выглядит следующим образом:
var socket = io.connect ('http: // localhost');
// после подключения к серверу немедленно отправьте событие «присоединиться» и сообщите другим свое имя пользователя
socket.emit ('join', {
Имя пользователя: «Имя пользователя хе -хе»
});
// после получения трансляции присоединения в чат, сообщение будет отображаться
socket.on ('broadcast_join', function (data) {
console.log (data.username + 'добавлен в чат -комнату');
});
// после получения трансляции покидали чат, сообщение отображается
socket.on ('broadcast_quit', function (data) {
console.log (data.username + 'оставить комнату чата');
});
// после получения сообщения, отправленного кем -то другим, сообщение будет отображаться
socket.on ('broadcast_say', function (data) {
console.log (data.username + 'say:' + data.text);
});
// Здесь мы предполагаем, что есть текстовое поле Textarea и кнопка отправки.btn-send
// связывать событие с использованием jQuery
$ ('. Btn-send'). Нажмите (e) {
// Получить текст текстового поля
var text = $ ('textarea'). val ();
// отправить событие, и сервер будет транслировать его, когда оно получит его.
socket.emit ('Say', {
Имя пользователя: «Имя пользователя хе -хе»
Текст: текст
});
});
Это простая демонстрация чата, которую вы можете расширить, как хотите. Socket.io - это в основном обработка подчинения и приема различных событий, и идея очень проста.