2011-09-09 22 views
6

kullanarak: Google Chrome ve Opera ile çok iyi çalışıyor, ancak Firefox ile 6.JavaScript ve WebSockets: Şu anda WebSockets ve bir PHP sunucusuna ile çalışıyorum belirli protokol

Ben protokol sürümüne nedeniyle olduğunu düşünüyorum Bu son kullanımlar: Yedinci sürümü kullanan bir yeri görüyorum, oysa Google Chrome ve Opera için daha eski.

Yani, bu yeni sürümü yönetmek için benim sunucu kodu değiştirilmiş: 258EAFA5-E914-47DA-95CA-C5AB0DC85B11 ve diğer maddeleri, Firefox bağlamak için başarılı ile güvenli anahtar karma oluşturmak. Ama eğer başka bir istemci bağlanmak istiyorsa (başka bir Firefox'ta bile), Firefox'lu ilk kullanıcı kendi bağlantısını keser.

Ben

Yani Firefox 6 tarafından kullanılan protokol yönetme fikrini atlamaya karar verdi socket_recv tarafından alınan bu tampon() boş veya karma ya bir ... testere (Internet üzerinde hiçbir belge bulunmakta ... !): Doğrudan JavaScript'te kullanmak için protokol belirtmek daha kolay olabileceğini düşünüyorum. this page günü

onlar bunu yazabiliriz demek:

var mySocket = new WebSocket("http://www.example.com/socketserver", "my-custom-protocol"); 

Ama biz yerine arasında yazmalısınız "my-özel protokol" Google Chrome ve Opera tarafından yönetilen protokol kullanmak için?

Şimdiden teşekkürler!

+0

Ayrıca "hixie-76" olarak adlandırılan ve iki ikili anahtar içeren "hybi-00" sürümü vardır. Ayrıca, kaydettiğiniz güvenli anahtarı kullanan yeni "hybi-07" de var. El sıkışma * isteğinin * hangi sürüme bağlı olduğuna bağlı olarak doğru bir toka oluşturmalısınız. Her iki versiyon da tuşlar için farklı başlık adları kullandığından, bu mümkün olmalıdır. – pimvdb

+0

Cevabınız için teşekkürler! 'Var mySocket = new WebSocket'e ("http://www.example.com/socketserver", "hybi-00");' ancak Firefox ile gönderme başlık hala aynı ...: Ben bu bir denedim Tek fark şu ki, başlıkta _Sec-WebSocket-Protocol: hybi-00_ var, ancak yine de yedinci sürümü kullanıyor. – KorHosik

+0

Sanırım tamamen açık değilim. Her tarayıcı her iki sürümü de gönderir ve bunu kontrol edemezsiniz. Ancak sunucuda hangi sürüme gönderildiğini kontrol edebilir ve uygun şekilde yanıtlayabilirsiniz (örn. Doğru tokalaşma yanıtı). – pimvdb

cevap

10

WebSocket kurucusuna protokol seçeneği gerçekten "alt-protokol" dir (genellikle bu isimle adlandırılır) ve bir uygulama düzey alt protokoldür. Gerçek WebSocket protokolü sürümü üzerinde herhangi bir etkisi yoktur. Tarayıcılar temel olarak WebSocket protokolünün tek bir sürümünü desteklemektedir. Çoğu sunucu protokolün çeşitli sürümlerini destekler.

Firefox 6.0, yeni HyBi protokolleri protokolü için destek sağladı (HyBi-00, gerçekten Hixie-76 protokolünün sadece bir kopyasıdır). HyBi versiyonları, veriler için yeni bir çerçeve formatı sunar ve sadece el sıkışmasında bir değişiklik değildir. Chrome 14 ayrıca yeni HyBi protokol serisini de kullanıyor.

WebSockets protokolünün en son sürümü şöyledir: http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-14, aslında firefox 6.0 aslında bu bir http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-07 olmasına rağmen pek çok gerçek değişiklik yoktur (çoğunlukla metnin kendisi için metinsel değişiklikler).

Firefox'un başarıyla bağlandığından emin misiniz (örn. Tarayıcıda gerçekten bir onopen olayı oluyor mu?)?

+0

Thanls! Gerçekten bir onopen olayı aldım, bu yüzden sorunun mesajların yollanmasından kaynaklandığını farz ediyorum (ve pimvdb, ^^ yi onayladı). Google Chrome 14 ile indirdiğim ve test ettim ve aynı sorun oluştu ... WebSockets'ı yönet şu an için çok zor görünüyor, sanırım Node.js'yi veya başka bir şeyi kullanacağımı düşünüyorum ^^ ' – KorHosik

+0

Bir göz atmak isteyebilirsiniz. Node.js'de çalışan ve oturum yönetimini yöneten bir WebSocket katmanı olan [Socket.IO] (http://socket.io) adresinden (ve ayrıca WebSockets tarayıcı tarafından desteklenmiyorsa uzun sorgulama için bir geri dönüşe sahiptir). – kanaka

+0

@KorHosik, bu sorunun cevabını yeterince aldığını düşünüyorsanız, sonrasında (ve tabii ki ;-) için) takip edenlere bir cevap seçmeyi unutmayın. – kanaka

İlgili konular