Комментарии 3
странно, читать о проблемах, которые были решены уже на заре появления ws, и описаны тут, к сожаления не могу найти эту статью, но суть в том что предаваемые данные делятся на две части через разделитель- "команда" — разделитель — данные.
в браузере элементарно, с помощью split, разделяются. и с помощью "рефлексии" вызывается функция по имени команды, и ей передаются данные. одна точка входа и выполнение любой функции в любом месте
con.onmessage = function (response) {
if (typeof (response.data) === 'string')
{
var r = rg.exec(response.data);
try {
if (r[1].includes('.'))
{
var d = r[1].split('.');
window[d[0]][d[1]](r[2]);
} else
{
window[r[1]](r[2]);
}
} catch (er) {
console.log('ошибка ' + er.stack);
console.log('вызов ' + r[1]);
console.trace();
}
}
где *rg = /^([a-z_0-9.]{1,})|([\s\S])/i;**(к примеру)
На серверной стороне также просто реализуется (на java, как минимум) есть метод onmessage, который "вызывает" с помощью рефлексии (про медленность рефлексии прошу не высказываться, это давно не так) нужный метод. для каждой страницы свой файл .java в котором находятся методы для работы с данной страницей. Наглядно, удобно.
Это конечно не Angular, но количество "служебного кода" намного меньше.
WebSockets в Angular: cоздаем Angular Service для работы с вебсокетами