2013-05-28 37 views
5

Miałem stronę internetową, która została zakodowana w całości w php i podstawowej ajax jquery. Jednak po dowiedziałem się o node.js/socket.io i recoded prawie wszystkie rzeczy w czasie rzeczywistym, które dotyczyły ajax przy użyciu nodejs i socket.io. Jestem nieco zdezorientowany, czy zrobiłem właściwą rzecz. Więc moje pytanie brzmi, kiedy ajax jest bardziej optymalnym rozwiązaniem niż przy użyciu węzła/gniazda?Kiedy używać node.js i kiedy używać ajax?

+6

To tak, jakby zapytać, czy bardziej optymalne jest zastosowanie dywanu do zabiegu chirurgicznego lub szczoteczki do zębów do siatkówki. Musisz poprawnie sformułować swoją terminologię. –

Odpowiedz

8

Po pierwsze, powinieneś poznać różnicę między tymi dwoma, odpowiedź stanie się jasna.

AJAX są używane do prostych żądań asynchronicznych. Nie wymagają konfigurowania serwera węzłów i są obsługiwane w prawie każdej przeglądarce. Są używane, gdy trzeba pobrać informacje z serwera. Mają one jednak na celu wysyłanie za pośrednictwem protokołu HTTP i dlatego muszą być poprawnym żądaniem/odpowiedzią HTTP (dodaje wagę).

WebSockets (dostępne w konfiguracji Node.js/socket.io) są używane, gdy często uzyskujesz dostęp do niektórych danych lub musisz mieć stałe, trwałe połączenie z serwerem. Możesz ustanowić połączenie przez gniazdo i wysyłać pakiety z serwera do klienta. Jest to lekki w porównaniu do rozwiązania AJAX, jednak Websockets nie są obsługiwane przez starsze przeglądarki i musisz skonfigurować serwer, który będzie obsługiwał takie żądania.

Socket.IO w szczególności wykorzystuje zbiór różnych technik, dzięki czemu można uzyskać lepszą obsługę przeglądarki: długie pollingowanie, wieloczęściowe przesyłanie strumieniowe itp. Umożliwia to otrzymywanie "natychmiastowej" informacji zwrotnej z serwera, jednak wciąż jest dostępna. w większości przypadków protokół wykorzystuje protokół HTTP. Będzie jednak korzystać z WebSockets, jeśli są one dostępne (tj. Obsługiwane przez przeglądarkę).

W niektórych przypadkach Node.js/Socket.io używa AJAX.

Jeśli nie pracujesz nad grą online lub jeśli nie musisz często aktualizować stanu aplikacji, sugeruję użycie AJAX zamiast instalacji Node.js/socket.io.

+1

+1 Dobry Wyjaśnienie. Mam nadzieję, że można go rozszerzyć nieco bardziej – samayo

+1

, ale z każdym połączeniem moja aplikacja robi z serwerem apache przypisuje poszczególne wątki do każdego z nich, pochłaniając w ten sposób mnóstwo zasobów, a obecnie skonfigurowałem zarówno apache/nodejs. Chodzi mi o to, że jeśli używam ajaxa, aby aktualizować moje kanały informacyjne co 20 sekund lub wyświetlać wyskakujące okienka, czy nie zajmie to dużo zasobów? – AnuragD

+1

To, co opisałeś w drugim akapicie, to WebSockets, a nie SocketIO.SocketIO zapewnia * gniazdo internetowe *, takie jak wsparcie, korzystając z dowolnego transportu obsługiwanego przez aktualną przeglądarkę; czy to websockets, iframe, długie polling czy nawet flash. – Matt

3

Nodejs doskonale nadaje się do zastosowań, w których konieczne jest utrzymywanie stałego połączenia między klientem a serwerem. Zasadniczo, jeśli chcesz przesłać dane w czasie rzeczywistym (klient czatu, gra itp.) Między klientem a serwerem, to świetna opcja.

Dzięki nodejs ten rodzaj trwałego połączenia nie blokuje innych żądań. Wiele innych języków, takich jak php (gdzie każde połączenie uruchamia nowy proces serwera) zmaga się w takich sytuacjach i prawdopodobnie skończy się ogromnym obciążeniem procesora.

Socket.io i node.js razem to jeszcze lepsza opcja, jeśli celem są dane w czasie rzeczywistym o najniższym możliwym opóźnieniu. Spowoduje to powrót do długiego sondowania, gdy inne technologie nie będą obsługiwane, a jego preferowane jest używanie gniazd internetowych.

Oczywiście zarówno apache (z php), jak i nodejs mogą wykonywać AJAX, powinno być naprawdę pytanie, czy to właściwy sposób przesyłania danych, musimy wiedzieć więcej o tym, co próbujesz osiągnąć!

Powiązane problemy