Tworzę aplikację internetową, która musi komunikować się z inną aplikacją przy użyciu połączeń z gniazdem. To dla mnie nowe terytorium, więc chcę mieć pewność, że gniazda różnią się od gniazd sieciowych . Wygląda na to, że są tylko koncepcyjnie podobne.
Pytanie, ponieważ początkowo planowałem użyć Django jako podstawy dla mojego projektu, ale w poście SO, do którego utworzyłem łącze powyżej, było bardzo jasne, że websockets nie są możliwe (lub przynajmniej nie są niezawodne, nawet z czymś takim jak django-websockets ) przy użyciu preferowanej konfiguracji Django (Apache z mod_wsgi). Jednak znalazłem inne posty, które od niechcenia importują moduł gniazda Pythona w celu czegoś tak prostego, jak pobranie nazwy hosta serwera .
Więc:
- Czy naprawdę się różnią?
- Czy jest jakiś powód, aby nie używać Django w projekcie, który polega na nawiązywaniu połączeń gniazdowych z zewnętrznym serwerem?
Websockets używają gniazd w swojej implementacji. Gniazda sieciowe są oparte na standardowym protokole (obecnie w ostatecznym wywołaniu, ale jeszcze nie ostatecznym), który definiuje „uzgadnianie” połączenia i „ramkę” wiadomości. Obie strony przechodzą przez procedurę uzgadniania, aby wzajemnie zaakceptować połączenie, a następnie używają standardowego formatu wiadomości („ramki”) do przekazywania komunikatów w tę iz powrotem.
Tworzę framework, który pozwoli ci komunikować się bezpośrednio między maszyną z zainstalowanym oprogramowaniem. To może pasować do twojego celu. Możesz śledzić mój blog, jeśli chcesz: http://highlevellogic.blogspot.com/2011/09/websocket-server-demonstration_26.html
źródło
Trzeba by użyć WebSockets (lub jakiś podobny protokół modułu np jako obsługiwany przez wtyczkę Flash), ponieważ po prostu normalna aplikacja przeglądarka nie może otworzyć czystego gniazda TCP.
Socket.IO
Moduł dostępnenode.js
mogą bardzo pomóc, ale zauważ, że to nie czysta moduł websocket w sobie.W rzeczywistości jest to bardziej ogólny moduł komunikacyjny, który może działać na podstawie różnych innych protokołów sieciowych, w tym gniazd WebSockets i Flash.
Dlatego jeśli chcesz używać
Socket.IO
na końcu serwera, musisz również użyć ich kodu klienta i obiektów. Nie możesz łatwo nawiązywać surowychWebSocket
połączeń zsocket.io
serwerem, ponieważ musiałbyś emulować ich protokół wiadomości.źródło
WebSocket to po prostu kolejny protokół poziomu aplikacji w protokole TCP, podobnie jak HTTP.
Niektóre fragmenty <Spring in Action 4> zacytowane poniżej, mają nadzieję, że pomogą ci lepiej zrozumieć WebSocket.
źródło
Jeśli chodzi o twoje pytanie (b), pamiętaj, że specyfikacja Websocket nie została sfinalizowana. Według W3C :
Osobiście uważam, że Websockets jest zbyt krwawiący, aby go obecnie używać. Chociaż prawdopodobnie uznam je za przydatne za jakiś rok.
źródło