SIP - великолепный протокол, пожалуй лучший из телефонных протоколов, imho, хотя у него есть всего ряд важных недостатков, на деле усложняющих эндпоинты. 1. P2P-пресенс. Ты не можешь просто так взять и уточнить статус абонента у сервера. Актуальный статус можно уточнить только у самого абонента. Иными словами, если ты хочешь точно знать статусы всех клиентов на сервере, да еще и, чтобы клиенты асинхронно сообщали об изменении, да еще и были доступны расширенные статусы, будь любезен сделать это сам мимо протокола SIP. Воспользуйся XMPP+SIP согласно rfc7081 https://tools.ietf.org/html/rfc7081 или пиши свой велосипед. К слову, presence - единственное, что ставит жирный плюс в карму XMPP. В остальном это мертворожденный ущербный протокол, по сравнению с SIP, imo.2. SIMPLE, в частности, MSRP и передача файлов. В SIP есть несколько способов передать файлы, как просто специальная сессия SDP, так и в рамках MSRP. НО!!! Этот файлообмен неудобен. Тот же скайп и другие IM заливают отправляемый тебе файл на удаленную хранилку, а тебе дают https-ссылку, обрамленную в интерфейсе клиента так, будто это передача файлов. И хранят его там какое-то время. Классическая передача файлов без хранилки не гарантирует отправителю доставку до адресата. Адресат может быть не в сети, например. 3. И тут мы подходим к еще более болезненной теме: offline messages и push notifications Нам нужно хранить сообщения и файлы адресата, пока он не в сети. А в случае смартфона, уведомлять об их наличии на сервере через сторонний сервис. Это все делается тоже отдельно от SIP, по очевидным причнам. 4. Подводный камень видеоконференц-связи. SIP очень хорошо это умеет, конференцию должно что-то "хостить", какой-то сервер-MCU (в случае скайпа это тот клиент, который начал звонок). Подводный камень в том, как люди начинают конференцию. Должно быть какое-то серверное приложение, которому мы отдаем запросы на создание конференц-комнаты. Несколько человек легко могут присоединиться к конференции, но они пока не знают куда, ведь нужно сначала создать комнату на сервере, она должна быть динамической и как-то уведомить остальных клиентов, что им нужно подключиться именно конференции и именно туда, где она находится. При этом нам нужно учесть пресенс приглашаемых клиентов (проблемы п.1) уметь передавать файлы этим людям (проблемы п.2) и часть из них может быть не в сети или на мобильнике (проблемы п.3). И все это пойдет мимо "чистого SIP" Мне известно только одна система, которая тащит все это целиком на SIP, решая 4 основные проблемы (расскажите о других), она называется Microsoft Skype for Business (не путать с обычным скайпом). И справляется довольно хорошо. И мультисерверность поддерживает в полном объеме. Ирония в том, что существование это системы - основная причина стагнации клиента скайпа для линукса. У них еле-еле хватает разрабов. Им пришлось купить несколько компаний для поддержки этого на android и ios. Все эти обновления вендового скайпа были по большей части ради совместимости скайпа с скапом для бизнеса. И вот вы будете смеяться между этими двумя системами нет не то что видеоконференц-звонков, на нем даже групповой чат не работает. А эта задача у них в приоритете, об-SIP-ить обычный скайп. Может к концу 2016-го года у них дойдут руки до линукса... Зачем нужен скайп? Да не нужен он, он гадко работает из-за своего p2p. Просто остальное еще хуже.
|