Передача данных по websocket

Реализация передачи данных по websocket выполнена при помощи библиотеки https://socket.io.

Примечание: символ ~/ будет означать корневой адрес

Шаг 1. Подключение библиотеки socket.io

<script src="~/socket.io/socket.io.js"></script>

Шаг 2. Инициализация соединения

var socket = io.connect('http://domain.com', {
path: '/virtaulPath' + '/socket.io',
transports: ['websocket']
});

, где

  • http://domain.com – корневой адрес сервиса
  • ‘/virtualPath’ – виртуальная директория, если есть, иначе String.Empty

Шаг 3. Регистрация пользователя на сервере.

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

socket.emit('rpc', {
namespace: 'PN',
action: 'shell',
method: 'getServerTime',
data: null,
token: 'текущий токен авторизации' // он и нужен нам
});

, где:

  • namespace: string – пространство имен, где хранятся удаленные процедуры. По умолчанию PN
  • action: string – имя области (действия)
  • method: string – имя метода
  • data: any – данные для обработки на сервере. Список элементов уточнять у разработчика методов.
  • token: string – токен авторизации. Его следует передавать каждый раз при выполнении запроса.

Примечание: полный перечень методов можно получить вызвав запрос GET ~/rpc/meta, который доступен авторизованным пользователям.

Далее подписываемся на событие ответа от сервера.

socket.on('PN.shell.getServerTime', function(obj) { // (1)
if(obj.code == 200) {
// (2) Регистрация прошла успешно
}
});

Имя события (1) на которое надо подписываться именуется из сложения строк.

var eventName = namespace + '.' + action + '.' + method;

Результатом ответа будет объект (2), который имеет следующую структуру:

  • meta: any – мета информация socket запроса
    • processed: boolean – если true, то значит операция завершена полностью, иначе требуется дожидаться следующего ответа.
    • status: string – строка со статусом выполнения операции
socket.io(evantName, function(obj) {
if(obj.meta.processed == false) {
// тут может отображаться статус выполнения операции
console.log(obj.meta.status);
} else {
// значит операция была завершена
}
});
  • data: any – содержит мету информацию выполнения RPC запроса
    • success: boolean – результат выполнения RPC – запроса
    • msg: string – текст сообщения
  • result: any – результат выполнения запроса
  • code: number – код выполнения
    • 200 – запрос выполнено удачно
    • 401 – не авторизован
    • 500 – ошибка выполнения

Шаг 4. Тестирование уведомлений

Подписываемся на соответствующее событие:

socket.on('notifiction', function(obj) {
if(obj.meta.processed == true) {
console.log(obj.result.title);
console.log(obj.result.message);
}
});

Для тестирования механизма уведомлений есть тестовый адрес:

GET ~/notification/test?username=[user]&message=[message];

, где:

  • username: string – логин пользователя
  • message: string – текст сообщения

В результате вызова запроса, обработчик должен его перехватить и вывести результат в консоли.

Print Friendly, PDF & Email

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *