Soket ve websocket arasındaki fark nedir?


178

Soket bağlantılarını kullanarak başka bir uygulama ile iletişim kurması gereken web uygulaması oluşturuyorum. Bu bana, bu yüzden emin olmak istiyorum için yeni bölge olduğunu prizler farklıdır WebSockets . Görünüşe göre sadece kavramsal olarak benzerler.

Başlangıçta Django'yu projem için temel olarak planlamayı planladığım için soruyorum, ancak yukarıda bağlantı kurduğum SO yazısında websockets'in django-websockets gibi bir şeyle bile mümkün olmadığı (veya en azından güvenilir olmadığı) çok açık ) tercih edilen Django kurulumunu kullanarak (mod_wsgi ile Apache). Yine de sunucunun ana bilgisayar adını almak kadar basit bir şey için Python'un soket modülünü rasgele içe aktaran başka yayınlar buldum .

Yani:

  • Gerçekten farklılar mı?
  • Django'yu dış sunucu ile soket bağlantısı kurmaya dayanan bir proje için kullanmamanın bir nedeni var mı?

Yanıtlar:


141

Sorularınızı cevaplamak için.

  1. Onlar benzer şeyler (genel olarak) ulaşmak bile, evet , onlar vardır gerçekten farklı. WebSockets tipik benzer bir protokol üzerinde uygulama sunucuya bağlanırken tarayıcılarından çalıştırmak HTTP olduğu üzerinde çalışır TCP / IP . Bu nedenle, öncelikle sunucusuna kalıcı bağlantı gerektiren Web Uygulamaları içindir. Öte yandan, düz soketler daha güçlü ve geneldir. TCP / IP üzerinden çalışırlar, ancak tarayıcılar veya HTTP protokolü ile sınırlı değildirler . Her türlü iletişimi uygulamak için kullanılabilirler.
  2. Hayır. Sebebi yok.

128
WebSockets HTTP'ye benzemez. Bazı çerçeveler ve HTTP uyumlu bir el sıkışma ile normal soketlerdir. HTTP uyumlu el sıkışma yalnızca bir web sunucusunun üzerinde çalıştığı aynı bağlantı noktasında WebSocket bağlantısına izin vermek içindir (böylece web sunucusu bunları yönlendirebilir), ancak bağlantı kurulduktan sonra web sunucusu döngüde değildir. WebSockets tarayıcı istemcileriyle sınırlı değildir. Hem tarayıcı olmayan bir istemciye hem de bir sunucuya sahip olan libwebsocket'e bakın .
kanaka

14
TAMAM. Anlıyorum ... Kabul edilen bu yanıtı silemediğim için sizden doğru bilgilerle düzenlemenizi rica ediyorum. Teşekkürler!
Pablo Santa Cruz

2
Websocket istemcileri oluşturabilir ve bunları tarayıcıların dışında kullanabilirsiniz. Websocket protokolü, "websocket" e yükseltilmiş bir bağlantıya sahip HTTP 1.1'dir.
Roger F. Gay

2
@huggie hayır. Küçük bir çerçeveleme vardır: tools.ietf.org/html/rfc6455#section-5 (küçük mesajlar için 2 bayt).
kanaka

2
@NiCkNewman bu muhtemelen iyi bir ayrı soru. Çerçeveleme yükü minimumdur ve sorun değildir. MMO ağları için WebSockets ile ilgili sorun iki katlıdır: yalnızca istemci sunucusudur ve TCP'dir (akış tabanlı). İyi MMO ağ performansı için doğrudan eşler arası ağa ve datagrama ihtiyacınız vardır (tutarlı düşük gecikme süresi her paketi almaktan daha önemlidir). İyi haber şu ki, WebRTC DataChannel bu özelliklerin her ikisine de sahip olduğundan, boşluğu doldurmaya ve tarayıcıda tam AAA MMO oyununa izin vermeye başlayacak.
kanaka

21

Websockets uygulamalarında yuva kullanır. Websockets, bir bağlantı "el sıkışma" ve mesaj "çerçevesi" tanımlayan standart bir protokole (şimdi son çağrıda, ancak henüz son değil) dayanmaktadır. İki taraf karşılıklı olarak bir bağlantıyı kabul etmek için el sıkışma prosedüründen geçer ve ardından mesajları ileri ve geri iletmek için standart mesaj biçimini ("çerçeve") kullanın.

Yüklü yazılım ile makineden makineye doğrudan iletişim kurmanızı sağlayacak bir çerçeve geliştiriyorum. Amacınıza uygun olabilir. İsterseniz blogumu takip edebilirsiniz: http://highlevellogic.blogspot.com/2011/09/websocket-server-demonstration_26.html


11

Sen Yuvalarının (veya kullanmak zorunda bazı normal tarayıcı uygulaması basitçe saf TCP soketi açamıyor çünkü Flaş eklentisi tarafından desteklenen benzer protokol modülü örneğin).

Kullanılabilir Socket.IOmodül node.jsçok yardımcı olabilir, ancak kendi başına saf bir WebSocket modülü olmadığını unutmayın .

Aslında WebSockets ve Flash yuvaları da dahil olmak üzere diğer çeşitli ağ protokollerinin üzerinde çalışabilen daha genel bir iletişim modülüdür .

Bu nedenle Socket.IO, sunucu tarafında kullanmak istiyorsanız , istemci kodlarını ve nesnelerini de kullanmalısınız. İleti protokollerini taklit etmeniz gerektiği için WebSocketbir socket.iosunucuya kolayca ham bağlantı yapamazsınız .


11

WebSocket, tıpkı HTTP gibi TCP protokolü üzerinden başka bir uygulama düzeyi protokolüdür.

Aşağıda alıntılanan bazı snippet'ler <Spring in Action 4>, WebSocket'i daha iyi anlamanıza yardımcı olabileceğini umar.

En basit haliyle, bir WebSocket sadece iki uygulama arasındaki bir iletişim kanalıdır (mutlaka bir tarayıcı dahil değildir) ... WebSocket iletişimi her türlü uygulama arasında kullanılabilir , ancak WebSocket'in en yaygın kullanımı bir sunucu uygulaması ve tarayıcı tabanlı bir uygulama.


2

Sorunuzla (b) ilgili olarak, Web Soketi spesifikasyonunun tamamlanmadığını unutmayın. W3C'ye göre :

Uygulayıcılar, bu spesifikasyonun kararlı olmadığının farkında olmalıdır.

Şahsen ben Websockets şu anda kullanmak için çok kanama kenarı olarak kabul ediyorum. Gerçi onları bir yıl kadar yararlı bulacağım.


9 yıl sonra ne olacak?
Venryx
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.