2012-03-05 25 views
14

Dla projektu powiadomienia, chcesz wypchnąć powiadomienia o wydarzeniach. Są to takie rzeczy, jak logowanie, zmiana profilu itp. I wyświetlanie do odpowiedniego klienta. Chciałbym przedyskutować kilka pomysłów na zebranie go razem i uzyskać porady dotyczące najlepszego podejścia.Jak zaimplementować Socket.IO z ASP.Net, IISNode, Node.JS i SQL Server dla powiadomień wypychanych opartych na zdarzeniach?

Zauważyłem here, że zmiany wprowadzone do CouchDB można wykryć strumieniem _changes, pobranym przez węzeł, a proces rozpoczyna się. Chciałbym zaimplementować coś podobnego (używam programu SQL Server, ale punkt wejścia na tym poziomie może nie być najlepszym rozwiązaniem).

Zamiast podążać za przykładem CouchDB (wykrywanie zdarzeń bazujących na bazach danych, myślę, że to po prostu komplikuje sytuację, ponieważ interesują nas zdarzenia klienta), myślałem, że gdy wystąpi zdarzenie, takie jak login użytkownika, to wiadomość jest wysyłana do serwera węzła z niektórymi szczegółami zdarzenia (żądanie RESTful?). Ta wiadomość jest następnie przetwarzana i transmitowana do wszystkich podłączonych klientów; odpowiedni klient wyświetla powiadomienie.

Proponowane ekosystem:

  • .Net 4.0
  • IIS
  • IISNode
  • Socket.IO
  • node.js
  • SQL Server 2008

Będzie być zbudowany do góry istniejącego projektu przy użyciu środowiska .Net (IIS itp.). Wiele przeglądarek klientów nie obsługuje gniazd internetowych, więc dobrym rozwiązaniem jest Socket.IO (wsparcie awaryjne). Jednak z tego, co I can see, Socket.IO tylko obsługuje tylko długie polling przez IISNode (co nie jest tak naprawdę problem).

Opcją jest udostępnienie punktu końcowego Socket.IO/Node wszystkim klientom, dzięki czemu powiadomienia oparte na kliencie mogą być wysyłane przez JS do serwera węzłów, który nadaje komunikat. (podąża za podstawowymi przykładami serwera-czatu/klienta/serwera).

Alternatywnie, można zastosować punkt końcowy IIS, ale może on obsługiwać tylko długi głosowanie (przez Socket.IO). Zapewniłoby to dodatkowe przetwarzanie back-end .Net, ale może zbytnio komplikować architekturę.

Czy dla węzła dostępne jest powiadomienie o zdarzeniu oparte na serwerze SQL?

Jakie byłoby najlepsze podejście?

Jeśli nie otrzymałem prawidłowej konfiguracji ekosystemu terminologii, proszę wyjaśnić.

Dzięki.

Odpowiedz

13

Najpierw polecam sprawdzenie SignalR przed rozważeniem dodania pliku iisnode/node.js do kombinacji technologii wcześniej istniejącej aplikacji ASP.NET.

Jeśli chodzi o websockets, niezależnie od tego, czy używasz ASP.NET czy node.js (socket.io), możesz używać tylko długich pollingów HTTP dla powiadomień o małym opóźnieniu, ponieważ websockets nie są obsługiwane przez HTTP.SYS/IIS do Windows 8 iisnode nie obsługuje obecnie websockets (nawet w systemie Windows 8), ale takie wsparcie można dodać później.

Ostatnio zrobiłem kilka badań dotyczących dostępu MSSQL z node.js. Istnieje kilka projektów OSS, niektóre wykorzystują natywne, specyficzne dla platformy rozszerzenia, niektóre próbują implementować protokół TDS wyłącznie w JavaScript. Nie jestem świadomy tego, który umożliwi dostęp do funkcji Powiadomienia SQL. Jednak sam zespół MSSQL inwestuje w pierwszej klasy sterownik MSSQL dla node.js, więc jest to coś, na co warto zwrócić uwagę (https://github.com/tjanczuk/iisnode/issues/139).

Jeśli planujesz używać powiadomień SQL do obsługi powiadomień o niskim opóźnieniu, zdecydowanie zalecamy rozpoczęcie od testów wydajności, które symulują pożądany poziom ruchu na poziomie serwera SQL. Powiadomienia SQL były przede wszystkim mechanizmem pomagającym utrzymać pamięć podręczną w pamięci zgodną z zawartością bazy danych, dzięki czemu może ona spełniać wymagania scenariusza powiadamiania lub nie. Te pomiary pomogłyby Ci zacząć od lepszego projektu.

+0

Dzięki Tomasz. Mówisz bardzo dobrze o implementacji SignalR. Problem polega jednak na tym, że projekt jest pofragmentowany między starszym kodem ASP i kodem .Net, więc myślę, że na razie komunikacja oparta na Javascript (nie C#) byłaby prawdopodobnie najlepszym wyborem. Jeśli otrzymam koncepcję SignalR poprawnie, w przyszłości, gdy projekt zostanie całkowicie przeniesiony do .Net, przełącz się na SiglanR. Czy są jakieś dobre przejścia z Node.JS, IISNode i Socket.IO? Spojrzałem również na kilka opcji SQL Server, ale przesadę dla tej aplikacji. – ElHaix

+0

Korekta: Zaimplementuj podejście SignalR w .Net 4.0 jako usługę WCF, która może być używana przez klasyczny kod ASP. Rozwiązany. – ElHaix

+1

Tomasz - czy możesz uczynić to ograniczenie jaśniejszym w dokumentach iisnode? Zainstalowałem iisnode i nodejs na moim Windows boxie, z głównym celem wykorzystania obsługi websocket - więc wygląda na to, że moje wybory używają nginx lub apache w systemie Windows lub przechodzę do Linuksa. – jnoss

1

Gorąco polecam używanie Pusher. Właśnie tego używamy i ułatwia implementację, ponieważ jest to rozwiązanie hostowane. Podłączenie go i sprawienie, by działało, jest naprawdę łatwe. Nie kosztuje zbyt wiele, chyba że przez ogromną skalę przesyłasz szaloną ilość wiadomości.

+0

Cześć Matt - czy masz link do "Pusher" ?? – pithhelmet