2009-06-26 7 views
5

Prawie przeciwnie niż push po stronie serwera, znany również jako Comet. Zastanawiam się, czy możliwe jest używanie długotrwałych połączeń HTTP do przesyłania informacji do serwera.Możliwe do wykonania HTTP push po stronie klienta?

przeciwieństwie do prostego XHR, połączenie będzie utrzymywane przy życiu, a dane będą przesyłane do serwera w odstępach czasu, jak zakończeniu akcje użytkowników itp

Korzystanie standardowe technologie nie wierzę, to jest możliwe, ale Jestem otwarty na sugestie dotyczące możliwych zastosowań lub genialnych sposobów osiągnięcia tego. Celem byłoby pełne przesyłanie danych o niskim opóźnieniu na serwer w celu szybkiego i wydajnego, jednokierunkowego przesyłania strumieniowego.

Nie jestem zainteresowany wykorzystaniem implementacji gniazd za pomocą flash/java bridges z powodu kłopotów związanych z obsługą zasad domeny lub uzyskania podpisu java. Surowe hacki działające bez dodatkowych zależności są mile widziane. Najlepiej, aby rozwiązanie zostało wykonane za pomocą javascript.

+0

Nie ma za to wiele powodów. Ponieważ protokół HTTP1.1 ponownie wykorzystuje połączenia, po ustanowieniu pierwszego połączenia kolejne połączenia są niewiarygodnie szybkie; standardowe techniki AJAX rozwiązują to bez żadnych problemów związanych z utrzymywaniem długotrwałych połączeń na serwerze, obsługą awarii połączenia, itp. – jvenema

Odpowiedz

1

Widziałem kiedyś rozmawiać przez facet za http://orbited.org/

Jest to biblioteka JS, który wykorzystuje standardową technologię, aby utrzymać otwarte połączenie pomiędzy serwerem a klientem można popchnąć rzeczy w dół.

+0

Zdecydowanie na wzór tego, czego szukam, chociaż byłoby znacznie lepiej, gdyby działało na standardowym porcie 80. –

+0

Jest to abstrakcyjne połączenie, które może skończyć się wykorzystaniem wielu żądań HTTP (aż jedna na wiadomość). Ale można go uruchomić na porcie 80 (po prostu nie, oczywiście, na tym samym adresie IP co serwer WWW). – Miles

1

Można to zrobić w jednym z kilku sposobów ...

Można keep a connection open i zrobić POST, albo jestem pewien, że jest to możliwe do zrobienia wieloczęściowe POST.

+0

Nie, zdecydowanie nie jest to w żaden sposób. –

+0

Pytanie dotyczy wysyłania niektórych danych, a następnie wysyłania większej ilości danych bez rozpoczynania nowego żądania HTTP - tj. nie tylko zwykłe testy POST. –

+0

możesz jednak pozostawić otwarte połączenie i czy możliwe jest wykonanie wieloczęściowego żądania GET? Każdy z tych dwóch scenariuszy działałby dobrze. – Nippysaurus

1

to robi: http://www.speich.net/projects/programming/firebug-testing.php

i spojrzeć na to: http://en.wikipedia.org/wiki/Comet_(programming)) i wokół google dla 'x-mixed-replace'

Wykonać XHR na Firefox. Musi użyć go bezpośrednio lub pobrać obiekt XHR, aby ustawić śmieszne pola. xhr.multipart = true i użyj procedury obsługi, a nie onreadystatechange.

Serwer powinien zwrócić dane z typem MIME "multipart/x-mixed-replace". plus separator wieloczęściowy. przepłukać, aby uzyskać ostatnie bajty dla każdej salwy. Nadal staram się to wygładzić.

Safari (~ = chrome) może to zrobić, ale szczegóły są różne. Zadzwoń do swojego tresera, gdy readyState = 3, nie 4. I za każdym razem, gdy nowy tekst jest dołączony do resultText, nie sam. Nie można uzyskać niczego do pracy w IE.

0

Jeśli szukasz dwukierunkowej komunikacji między przeglądarką a serwerem, prawdopodobnie szukasz WebSockets. Zobacz na dole artykułu w Wikipedii dostępne wersje.

+0

Dzięki :) To było 3 lata temu, gniazdka nie były tak daleko wzdłuż wtedy, jak są dzisiaj. –