Wytyczne dotyczące architektury „pojedynczej strony internetowej”

12

Zamierzam rozpocząć boczny projekt budowy aplikacji internetowej „pojedynczej strony”. Aplikacja musi być w czasie rzeczywistym, wysyłając aktualizacje do klientów w miarę zmian.

Czy są jakieś dobre zasoby dla najlepszych praktyk w architekturze dla tego rodzaju aplikacji? Najlepszym zasobem, jaki do tej pory znalazłem, jest artykuł o architekturze trello tutaj: http://blog.fogcreek.com/the-trello-tech-stack/

Dla mnie ta architektura, choć bardzo seksowna, jest prawdopodobnie przeprojektowana dla moich konkretnych potrzeb - chociaż mam podobne wymagania. Zastanawiam się, czy muszę zawracać sobie głowę publikacją po stronie serwera, czy nie mogę po prostu przesyłać aktualizacji z serwera, gdy coś się dzieje (np. Kiedy klient wysyła aktualizację do serwera, zapisuje aktualizację do bazy danych, a następnie wysłać aktualizację do klientów).

Technicznie rzecz biorąc, prawdopodobnie zamierzam to zbudować w Node.JS, a może Ruby, chociaż wytyczne dotyczące architektury powinny do pewnego stopnia mieć zastosowanie do wszelkich bazowych technologii serwerowych.

Matt Roberts
źródło

Odpowiedzi:

5

Zdecydowanie spojrzałbym w kierunku MVC po stronie klienta dla takich jak Backbone.js. Jest bardzo lekki, ale zapewni twojej aplikacji bardzo potrzebną strukturę. Bardzo polecam screencast Peepcode jako najszybszy sposób na zdobycie większej wiedzy o Backbone.

Miłą zaletą architektury MVC po stronie klienta jest to, że łatwiej można przejść do wymiany danych po stronie serwera, np. Strukturyzowany JSON przez REST.

Backbone.js obsługuje to od razu po wyjęciu z pudełka - możesz serializować swoje modele między klientem a serwerem jako JSON, co może uwolnić nas od myślenia w kategoriach żądania / odpowiedzi.

Coś takiego jak Node.js po stronie serwera odwołuje się w tym modelu, w którym prawdopodobnie będziesz mieć wiele krótkotrwałych potencjalnie asynchronicznych żądań wypychania i pobierania danych.

Jedna alternatywa ... Model taki jak Comet może być prostym sposobem na uzyskanie pub / sub web i istnieją pewne ramy po stronie serwera, które to obsługują.

Benjamin Wootton
źródło
Pozdrawiam, zdecydowanie myślałem o użyciu MV * FW po stronie klienta i uczyłem się o Kręgosłupie .. Dobre wskazówki.
Matt Roberts,
1

Prawdopodobnie wybrałbym framework javascript MV * dla frontonu. Sam buduję jednostronicową aplikację internetową i po przeanalizowaniu szeregu rozwiązań ostatecznie zdecydowałem się na Backbone.js. Przekonałem się, że chociaż to rozwiązanie nie zapewniało największej funkcjonalności od samego początku, zapewniło mi podstawową podstawę i jest o wiele bardziej elastyczne niż inne rozwiązania, na które patrzyłem (co było dla mnie ważne).

Inne popularne rozwiązania to Ember.js i Knockout.js, które zapewniają więcej gotowych funkcji, jednak musisz przestrzegać ich konwencji, aby korzystać z funkcji thT (która może, ale nie musi, działać).

ryanzec
źródło
1

To jest bezmyślne IMO. AngularJS dla frontonu, ponieważ jest niesamowity. NodeJS / express / SocketIO dla dynamicznego i seksownego backendu z dobrem pub / sub i minimum zamieszania. Jako bonus możesz użyć jednego języka dla przodu i tyłu!

Sprawdź moją implementację tego samego https://github.com/hackify/hackify-server na przykład

Jedno zastrzeżenie, niektórzy ludzie zalecają alternatywę NodeJS do gniazda o nazwie sockjs, ale nie sprawdziłem tego, więc nie mogę go polecić

Michael Dausmann
źródło
0

Wygląda na to, że patrzysz na Apache 2.2 z serwerem aplikacji PHP lub Tomcat z prostym serwletem, który obsługuje żądania. Jest to odpowiednik stolarza dla młota i gwoździ. Nic skomplikowanego, ale wykonuje zadanie. Jeśli kiedykolwiek chciałeś rozszerzyć funkcjonalność, zawsze możesz to zrobić, ponieważ Tomcat może obsługiwać pliki jsp i jsf, jeśli kiedykolwiek były potrzebne.

Jeśli chodzi o interfejs, bez problemu skorzystam z jQuery ( $ .post , $ .load , $ .ajax ), ponieważ jest to bardzo przydatne podwojenie jako sposób na dodanie funkcjonalności strony w połączeniu z interfejsem jQuery

Neil
źródło
0

Jeśli chcesz aktualizować klientów w czasie rzeczywistym, musisz albo wdrożyć długo blokujące połączenia „AJAX”, albo najlepiej użyć nowoczesnych gniazd internetowych. Umożliwiają one wypychanie aktualizacji do podłączonego klienta, który będzie obsługiwany przez odrobinę javascript.

Rozumiem, że obecna najnowsza (lub najnowsza moda) to AngularJS firmy Google. Jest częściowo zaprojektowany, aby ułatwić pisanie SPA.

gbjbaanb
źródło
0

Jeśli chcesz czegoś zbliżonego do średniego stosu (node.js, mongo ...) do zbudowania jednostronicowej aplikacji, która musi być reaktywna, wybrałbym meteor . Zwłaszcza jeśli budujesz prototyp i zaczynasz od zera.

Szyny z kanciastym frontendem byłyby dobrym wyborem imho, ale trudniej będzie ci „wysyłać aktualizacje do klientów w miarę zmian”, ponieważ będziesz musiał zainstalować określone klejnoty, połączyć kilka bibliotek z długimi pollingami lub biblioteką sockjs .. .

Benjamin Crouzier
źródło