2014-04-07 17 views
13

Websocket sunucumun bağlantısının kurulup kurulmadığını test etmem gerekiyor.Başarısız bir web bağlantısı bağlantısı için "bağlantı kurulamıyor" hatasını yakalayabilir miyim?

Şu anda sunucuya bağlanabiliyorum, ancak bu sunucunun erişilememesi olasılığını yakalamak istiyorum, bu yüzden bu soru websocket bağlantısı kurulamadığında ne yapılacağı ile ilgili zaman aşımına uğradı.

Firefox'ta yalnızca temel web kodu kodunu kullanarak, yaklaşık 20 saniye içinde zaman aşımı olur ve hata işleyicimi arayın. Ancak, tarayıcıda (en azından Firebug'u kullanmam için) görünen bir JavaScript hatası da atacaktır. Günlük sonra gösterilmektedir:

Firefox can't establish a connection to the server at ws://192.168.0.1/. 

şimdiye kadar denedim Ne:

  • önleyin 20 saniyelik zaman aşımı onopen işleyici veya henüz adı olmuştur istemediğini kontrol benimkinin window.timeout ekleyerek, ancak Bu, JavaScript hatasını engellemez.
  • kendi zaman aşımı sonunda WebSocket Kapatmaya zorlama, ama şimdi İKİ JavaScript hatalarını olsun - Orijinal artı: my koduna try {} catch(e) {} ekleme

    The connection to ws://192.168.0.1/ was interrupted while the page was loading.

  • , hem soket bağlanırken ve kapatıyor - değişiklik yok.

Websocket hatalarını tarayıcıda gösterilmemesiyle ilgili herhangi bir fikir var mı? ben şimdiye kadar learnd ettik ne

+0

sadece gösterilmesini WebSocket hataları önlemek isteyen veya tüm hataları mesajları yasaklayarak olur musunuz iyi ol? Buradaki yanıt yararlı olabilir: http://stackoverflow.com/questions/7120290/how-to-suppress-all-javascript-runtime-errors – Greg

+0

Şu anda, yalnızca websocket hatalarını engellemeyi tercih ediyorum - eğer her şey mümkün. Değilse, gönderdiğiniz seçeneği kullanmam gerekebilir. Teşekkürler! – semmelbroesel

+0

Ne yazık ki, özellikle bu hataları filtrelemek için bir yol önermek için websockets ile yeterince tanıdık değilim. Yine de iyi şanslar! – Greg

cevap

7

geçerli: cant: 0 (

... Bu biraz tarayıcı özgü bir davranıştır çünkü ...

  • yüzden yapabileceğiniz tek şey kullanıyor ws geri aramaları
  • VEYA sadece console.log üzerine ... nesne ve dua; 0) ı Ancak yaptığımız koduyla

i got bazı hata mesajlarının kurtulmak, belki de yardım edeceğiz;)

örn:

    Krom ölü sunucular hakkında şikayet ve sessizce yeniden denemez
  • ..
  • IE 11 hala komut dosyası hatası
  • verir
  • vb ..

A Temel Sınıf WS sarmak için: geri aramaları göz at!

/** 
* Socket Class 
*/ 
Client.Source.Network.Socket.Class = new Class({ implements: [Client.Source.Network.Socket.Interface] },function(Host, Port){ 

var Configuration = { 
    Server: { 
     Protocol: 'ws', 
     Host: Host, 
     Port: Port 
    }, 
    Event: { 
     Open: function(){}, 
     Error: function(){}, 
     Message: function(){}, 
     Close: function(){} 
    } 
}; 

var Socket = null; 

/** 
* @return {string} 
*/ 
var HostUrl = function() { 
    return Configuration.Server.Protocol + '://' + Configuration.Server.Host + ':' + Configuration.Server.Port + '/Connection' 
}; 

/** 
* @returns {boolean} 
*/ 
var IsSupported = function() { 
    return "WebSocket" in window; 
}; 

this.Open = function() { 
    if(IsSupported()) { 
     Socket = new WebSocket(HostUrl()); 
     Socket.onopen = Configuration.Event.Open; 
     Socket.onerror = Configuration.Event.Error; 
     Socket.onmessage = Configuration.Event.Message; 
     Socket.onclose = Configuration.Event.Close; 
    } else { 

    } 
}; 

this.Send = function(Text) { 
    Socket.send(Text); 
}; 

this.Close = function() { 
    Socket.close(); 
}; 

this.onOpen = function(Callback) { 
    Configuration.Event.Open = Callback; 
}; 
this.onError = function(Callback) { 
    Configuration.Event.Error = Callback; 
}; 
this.onMessage = function(Callback) { 
    Configuration.Event.Message = Callback; 
}; 
this.onClose = function(Callback) { 
    Configuration.Event.Close = Callback; 
}; 

}); 

bir Connect'e() at atın: onError(), onClose() işlevi

/** 
* Network Class 
*/ 
Client.Source.Network.Class = new Class({ implements: [Client.Source.Network.Interface] },function(){ 

var _Self = this; 
var Socket = null; 

this.Connect = function(Host, Port) { 
    Socket = new Client.Source.Network.Socket.Class(Host, Port); 
    Socket.onOpen(function(){ 
     _Self.Gui().Create(Client.Module.Client.Gui()); 
     Client.Module.Chat.Message('Connected', 'green', 11); 
     Client.Module.Audio.Play('Client.Resource.Audio.Chat.UserOnline', 0.2); 
    }); 
    Socket.onMessage(Response); 
    Socket.onError(function(){ 
     Client.Module.Chat.Message('Connection Error', 'red', 11); 
    }); 
    Socket.onClose(function(){ 
     _Self.Gui().Destroy(); 
     Client.Module.Chat.Message('Disconnected', 'darkred', 11); 
     Client.Module.Chat.Message('Connecting...', 'orange', 11); 
     window.setTimeout(function() { 
      _Self.Connect(Host, Port); 
     }, 2000); 
    }); 
    Socket.Open(); 
}; 

this.Request = function(Application, Request, Data) { 
    Socket.Send(JSON.stringify({ Application: Application, Request: Request, Data: Data })); 
}; 
var Response = function(Message) { 
    Message = JSON.parse(Message.data); 
    Library[Message.Application].Execute(Message.Request, Message.Data); 
}; 

var Library = {}; 
this.Protocol = function(Application, Callback) { 
    Library[Application] = Callback; 
}; 

var GuiObject = null; 
this.Gui = function Gui() { 
    if(GuiObject === null) { 
     GuiObject = new Client.Source.Network.Gui(); 
    } 
    return GuiObject; 
}; 
}); 
+0

+1! Ama lütfen yukarıdakilerin ne olduğunu kısaca açıklayabilir misiniz? (* hataları yakalayan anahtar çizgiler hangileridir. *) (Ve bir yan not olarak, kod ne zaman WebSocket' içermiyor ve aynı zamanda '' 'yapmak istediği gibi konsol '' geçersiz kılmıyor?) – Jodes

+0

Thx:) Kütüphanelerimden birinden örnekler kopyaladım, bu yüzden kopyalamaya/yapıştırmaya çalışmaz, sadece bir şeyi açıklamak içindir. İlk kod bloğu websocket nesnesi için bir sarıcı sınıftır. Yeni WebSocket (HostUrl()); '' this.Open(); 'olarak adlandırır. Yakalama, ikinci kod bloğunda dışarıda ele alınır, bu nedenle lütfen 'Socket.onError' geri aramasına bakın. '' Konsol'u geçersiz kılmaz çünkü bunu yapmak amaçlanmamıştır .. hatalar açılırsa ve geri arama tarafından ele alınmazsa, _may_ console.log dosyasını geçersiz kılarsınız ancak tarayıcı hata ayıklama özelliğini öldürür, bu yüzden varsayılan olarak orada değildir;) – DerDu

İlgili konular