Подтвердить что ты не робот

Node.Js + Socket.IO vs SignalR vs С# WebSocket Server

В настоящее время у меня есть приложение TCP-сервера, написанное на .Net, которое получает и отправляет сообщения клиентам. Я смотрю на создание веб-приложения, поэтому вам нужен уровень связи.

Я построил приложение Node.JS + Socket.IO, которое подключается к моему TCP-серверу, а затем передает сообщение в веб-приложение, и все работает нормально.

Я только что прочитал о SignalR в качестве альтернативы, чтобы сохранить его в стеке .Net.

Однако я также обнаружил, что могу написать С# Websocket Server, базовую демонстрацию здесь

Я предполагаю, что этот базовый сервер - это то, что SignalR, но, очевидно, с гораздо большим количеством функций в нем?

То, что я пытаюсь решить, - это просто добавить текущее TCP-приложение с сервером Websocket или перейти на отдельный маршрут SignalR или Node.js? Из интереса, как работает приложение SignalR, является ли это службой Windows, консольным приложением или службой IIS?

4b9b3361

Ответ 1

SignalR подобен Socket.IO тем, что поддерживает транспортную согласованность/резервное копирование. Это каркас, а не сервер, поэтому вам нужно разместить его на каком-то сервере. У нас есть хосты для ASP.NET, OWIN (например, Kayak) и самообслуживания, поэтому вы можете легко запускать его в своем собственном процессе, например. служба Windows.

SignalR поддерживает клиенты для браузеров (JS),.NET, Windows Phone 7 и Silverlight. Также есть клиенты для таких вещей, как iOS, Mono Touch и т.д.

SignalR предоставит вам API более высокого уровня, чем исходные сокеты, что является его большим преимуществом, позволяя вам делать такие вещи, как "RPC", от сервера к клиентам в широковещательном (или целевом) режиме.

Ответ 2

Некоторые последствия, которые были упущены

Я использовал обе технологии и работал с обеих сторон стеков .NET/ node.

  • Хотя я предпочитаю сторону node в эти дни, если вы работаете только в .NET, SignalR является очевидным выбором. И наоборот, если вы построите все свои проекты в node, я бы пошел с socket.io или sockjs. Если ваш охват достаточно узкий, вам не нужно беспокоиться о резервных и подобных вещах, я бы рекомендовал проверить ws модуль, так как он проще и легче в ваших зависимостях. Раньше socket.io был больно в Windows из-за установки проблем с node -gyp, неспособным установить собственные зависимости (node-gyp требует много шагов настройки, которые сильно различаются в зависимости от того, какая версия Windows у вас есть, но необходима для встроенных встроенных модулей С++). ОБНОВЛЕНИЕ. Этот бит Windows не так уж важен благодаря windows-build-tools.
  • Если у вас есть балансировщик нагрузки и вы планируете запустить SignalR, вам нужно будет настроить SQL или Redis в качестве объединительной платы для обхода балансировки нагрузки. У вас будут схожие проблемы, связанные с сокеткой .io, и есть [несколько поддерживаемых методов] [1] (1 из которых также redis).

Обновление - удалена информация о jquery, поскольку она больше не применима

Ответ 3

Разработка надежного TCP-сервера с масштабируемым потоком может быть непростой задачей. С другой стороны, в Интернете есть очень хорошие ресурсы, чтобы начать свой собственный. Например, если вы просто ищете хорошие проекты с открытым исходным кодом WebSocket, я бы посоветовал:

Проект Alchemy: Библиотека с открытым исходным кодом С# WebSocket

Проект Fleck: Библиотека с открытым исходным кодом С# Websocket Library

SignalR может быть приятным, но для обеспечения функции WebSocket требуется Windows Server 8/IIS 8.

На стороне коммерческого продукта, особенно учитывая, что функция websocket недоступна во всех браузерах, я рекомендую PokeIn WebSocket и обратную Ajax-библиотеку. Начиная с версии 2.0, он имеет встроенный сервер WebSocket. Подробности доступны здесь