2011-08-05 24 views
5

Son birkaç gündür WebSockets ile denemeler yapıyorum ve yeni, çok havalı teknoloji ile bazı karışık deneyimler yaşıyorum. Ben hybi-09 taslak spec sürümü olduğunu inanıyorum HTML5 Labs, en son sürümü kullanan basit bir sohbet istemcisi yazdım. İstemci Chrome'da harika çalışıyor (dev kanal v14.0). Her şey gerektiği gibi çalışır. Ancak, WebSockets'ları (FireFox (v6.0b) (Evet, WebSockets işlevini açtım) Safari (v5.1)) yerel olarak destekleyen her büyük tarayıcıda, bazı nedenlerle bağlanamaz.WebSocket sürümleri ve geriye dönük uyumluluk

$(document).ready(connect); 

function connect() { 
    if ('WebSocket' in window) { 
     websocket = new WebSocket('ws://' + window.location.hostname + ':4502/chat'); 
    } 
    else if ('MozWebSocket' in window) { 
     websocket = new MozWebSocket('ws://' + window.location.hostname + ':4502/chat'); 
    } 
    else { 
     //not supported 
     return; 
    } 

    websocket.onopen = function() { 
     //do some setup stuff 
    }; 

    websocket.onclose = function() { 
     //DOH 
    }; 

    websocket.onmessage = function (e) { 
     //Do some stuff with e.data 
    }; 
} 

ve bazı (C#) sunucu kodu: İşte benim istemci kodunun bazı var

static void Main(string[] args) 
{ 
    var host = new WebSocketsHost<ReverseService>(); 
    host.AddWebSocketsEndpoint("ws://" + Environment.MachineName + ":4502/chat"); 
    host.Open(); 

    Console.ReadLine(); 
} 

Dediğim gibi, Chrome'da ince bağlar ve olması gerektiği gibi .onopen fonksiyonunu vurur. FF ve Safari'de, doğrudan byclose işlevine gider ve asla bağlanamaz.

"NetworkError: 501 Not Implemented - http://localhost:4502/chat" 
Firefox can't establish a connection to the server at ws://localhost:4502/chat 

Ve Safari'de: Aklıma

WebSocket frame (at 4294967295 bytes) is too long. 

tek şey geriye dönük uyumluluk sorunu çeşit FF, ben aşağıdaki hataları olsun. Ben Chrome 14.x, hybi WebSockets 10 taslaklarını uygular inanıyoruz ve FF 6 taslak 07 veya 08 uygular düşünüyorum ve Safari 5.1 emin değilim. Sorunun ne olduğu ve/veya nasıl düzeltip düzeltemeyeceğimiz konusunda herhangi bir kavrayış varsa, bu yardımdan memnuniyet duyarım. Teşekkürler!

+0

Windows kod parçacığı için teşekkürler. Crossplatform js yazmak için basit bir yol arıyordum. – Stevko

cevap

5

Chrome 14 ve Firefox 7 (Aurora yapısı, "Moz" ile öntanımlı, ancak varsayılan olarak etkinleştirilmiştir) protokolün HyBi-10 sürümünü destekler. Yerel WebSockets desteğine sahip olan diğer her şey hala protokolün Hixie-76 sürümünü kullanıyor.

Halihazırda HyBi protokolünü destekleyen sunucu uygulamaları var ve yakında Chrome 14'ün yerel olarak sahip olduğu pek çok şey var. Hem Hixie-76 hem de protokolün daha yeni HyBi sürümleri için destek olan bazı programlar vardır (libwebsockets, websockify). Microsoft'un prototip sunucu uygulamasının yalnızca protokolün bir versiyonunu desteklediğine (özellikle Hixie döneminde oyunda olmadıkları için) şaşırmadım.

Güncelleme:

Bazı sunucu seçenekleri:

  • libwebsockets - C uygulaması
  • websockify - My piton uygulanması. websockify TCP soket proxy/köprüsüne bir websockets, ancak websocket.py genel bir websocket modülüdür.
+0

Vay, harika cevap. Çok teşekkürler. :) Her ikisini de destekleyen sunucu uygulamalarından birini nerede bulabilirim? – Chris

1

Chrome 14 ve Firefox 7/8'in uyumluluğunu, en son protokol belirtiminin belirli özelliklerine göre listeleyen bir WebSockets protokolü test report.

Test paketi, istemcileri ve sunucuları yazmak için kullanılabilecek Python/Twisted tabanlı WebSockets uygulamasını içeren küçük bir projem olan Autobahn WebSockets10'un bir parçasıdır.

Kod, Apache 2.0 lisanslı ve hepsi GitHub'dadır.

1

Burada Hybi10 ve eski protokolleri destekleyen bir .NET tabanlı (ücretsiz) WebSocketServer.http://xsockets.net

bulunan veya Visual Studio 2010 Paket Yöneticisi Konsolu yükleme-Paket XSockets kullanarak projeniz (MVC3) için eklentiyi çalıştırmak edilebilir

Ben kullandığı (Ayrıca 2008 artık Nuget yapacağını düşünüyorum) videolardan biri olarak yardım http://xsockets.net/Video/Index

İlgili konular