Мне нужно создать веб-мессенджер для мобильных устройств. Для этого я хочу, чтобы моя связь между сервером и клиентом была открыта, чтобы сервер мог отправлять сообщения без какого-либо запроса клиента. Я нашел SignalR и Websockets подходящими для этого. Но я не уверен, какой из них использовать.
SignalR или веб-сокет? Какой из них использовать для создания веб-чата для мобильных устройств?
Ответы (2)
Под капотом SignalR использует веб-сокеты, длительные опросы, события, отправленные сервером, или кадры Forever, в зависимости от того, что поддерживается клиентом и браузером, для включения функций реального времени в приложениях. Вам следует рассмотреть возможность его использования, чтобы избежать проблем с совместимостью и получить дополнительные функции, которые можно использовать для разработки приложений реального времени. Вы можете обратиться к следующей документации для получения более подробной информации:
ответ таков: это действительно зависит. это зависит от вашего масштаба, я не говорю, что SignalR плохо масштабируется. речь идет о поддержке клиентских библиотек SignalR на мобильных устройствах.
мы использовали signalr некоторое время и столкнулись со многими головными уборами, а затем вернулись к необработанным веб-сокетам.
по моему опыту:
1- Доза SignalR не поддерживает Websocket на клиентах xamarin. (поскольку он использует типы в System.Net.WebSockets, а это пространство имен недоступно ни в одном из профилей PCL.), и они не планируют добавлять его в ближайшее время (я связался с ними на github). и, возможно, вам не нужны другие решения (долгий опрос или вечный кадр и ... потребляют в 5 раз больше памяти, чем WebSockets).
2- он обеспечивает жалкий контроль над фактическим транспортом, который доставит вам большие проблемы на мобильных устройствах при работе с режимом Doze, блокировкой экрана и т. д. .... (для этих ситуаций есть обходные пути, но они в основном очень грязные).
в заключение, я думаю, что для мобильных устройств, если у вас есть время, используйте необработанные System.Net.WebSockets, которые реализованы в моно (согласно тому, что сказал Джеймс Джеймс Монтеманьо) и основной .net. в противном случае вы можете использовать пакет nuget Microsoft.WebSockets, который, однако, больше не поддерживается.