Node.Js + Socket.IO проти SignalR проти C # WebSocket Server


75

На даний момент у мене є серверна програма TCP, написана на .Net, яка отримує та надсилає повідомлення клієнтам. Я розглядаю створення веб-додатків, тому потрібен рівень комунікації.

Я створив додаток Node.JS + Socket.IO, який підключається до мого сервера TCP, а потім переносить зв'язок із веб-додатком, і все працює нормально.

Я щойно прочитав про SignalR як альтернативу, щоб зберегти його в стеці .Net.

Однак я також виявив, що я можу написати сервер C # Websocket Server - базову демонстраційну версію тут

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

Я намагаюся вирішити, чи просто додати мою поточну програму TCP до сервера Websocket, чи спуститись окремим маршрутом SignalR або Node.js? Як цікаво, як працює програма SignalR, це як служба Windows, консольна програма чи служба IIS?


1
Щоб отримати інформацію, ви також можете спробувати SuperWebSocket. Наразі я щойно написав сервер WebSocket безпосередньо. У грі лише 2 ключових протоколи (решта - практично ідентичні варіанти), тому це не масово. Я частково чекаю .net 4.5 / win8, який включає підтримку сервера WebSocket OOTB.
Марк Гравелл

@MarcGravell Дякую. Ось допис, що показує сервер .Net 4.5 Websocket marcinbudny.blogspot.com/2011/10/ ... Я не впевнений, як працює сервер.
Джон

1
Не забувайте, що socket.io робить набагато більше, ніж просто веб-сокети, він також повертається до довгого опитування тощо
mtsr

1
@MarcGravell Через рік. якому ви віддаєте перевагу (після випробування vs2012 signalR та вузла)?
Рої Намір,

2
@Royi Я відповім на це побічно: ми все ще є нашим користувацьким сервером сокетів і плануємо випустити код як F / OSS
Marc Gravell

Відповіді:


78

SignalR схожий на Socket.IO тим, що підтримує переговори про транспорт / резервні копії. Це фреймворк, а не сервер, тому вам потрібно розмістити його на якомусь сервері. У нас є хости для ASP.NET, OWIN (наприклад, на байдарках) та самостійного хосту, тому ви можете легко запустити його у своєму власному процесі, наприклад, службу Windows.

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

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


21

Інші наслідки

Я використовував обидві технології та працював з обох сторін стеків .NET / node.

  1. Хоча сьогодні я віддаю перевагу вузловій стороні, якщо ви працюєте лише в .NET, SignalR є очевидним вибором. І навпаки, якщо ви будуєте всі свої проекти в node, я піду з socket.io або sockjs . Якщо ваш обсяг досить вузький, щоб вам не потрібно було турбуватися про резервні копії та подібні речі, я б рекомендував перевірити модуль ws, оскільки він простіший і легший від ваших залежностей. У минулому socket.io був болем для Windows через проблеми з установкою, коли node-gyp не міг встановити власні залежності ( node-gyp вимагає безлічі кроків конфігурації, які різко відрізняються залежно від того, яка версія Windows у вас є, але потрібна для C ++ вбудовані модулі). ОНОВЛЕННЯ Цей біт Windows вже не настільки актуальний завдякиwindows-build-tools .
  2. Якщо у вас є балансир навантаження і ви плануєте запустити SignalR, вам потрібно буде встановити SQL або Redis як задню панель для обходу балансувача навантаження. Ви матимете подібні проблеми для вирішення на стороні socket.io, і є [кілька підтримуваних методів] [1] (1 з яких також є redis).

Оновлення - вилучено інформацію про jquery, оскільки вона більше не застосовується


3
Насправді клієнтська бібліотека SignalR JavaScript 2.2.0 (випущена ще в січні 2015 року) підтримує будь-яку версію jQuery> = 1.6.4. тобто вам не доведеться дублювати версії jQuery (які все одно зламаються). Я щойно підтвердив, що це має місце у прикладі програми для чату, що працює в Chrome, IE та Firefox з клієнтом SignalR JavaScript версії 2.2.0 та jQuery 2.1.4. Крім того, дуже ймовірно, що більшість браузерів мають сумісну копію кешованого jQuery.
dmcquiggin

1
Для тих, хто не обізнаний, SignalR тепер поставляється як служба, що надається Azure, яка управляє аспектом її масштабованості для вас. Вони також мають вільний рівень, з яким можна пограти.
Shayan C

15

Розробка масштабованого / безпечного для потоку сервера TCP може бути непростим завданням. З іншого боку, в Інтернеті є дуже приємні ресурси для того, щоб запустити свій власний. Наприклад, якщо ви просто шукаєте гарні проекти з відкритим кодом WebSocket, моя порада буде такою:

Проект «Алхімія» : бібліотека C # WebSocket з відкритим кодом

Проект Fleck : Бібліотека C # WebSocket з відкритим кодом

SignalR може бути приємним, але йому потрібен Windows Server 8 / IIS 8, щоб забезпечити функцію WebSocket.

Що стосується комерційного продукту, особливо з огляду на те, що функція websocket доступна не у всіх браузерах, я рекомендую PokeIn WebSocket та зворотну бібліотеку Ajax. Починаючи з версії 2.0, він має вбудований сервер WebSocket. Деталі доступні тут


Оголошення, про яке згадувалося раніше, Signalr має резервний транспорт, тому, якщо веб-сокети не підтримуються (на сервері чи клієнті), він потрапляє до іншого типу транспорту, і тому ..
psulek

2
Windows Server 2012 потребує не SignalR, тому це не його вина.
Аліссон,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.