2016-03-28 17 views

cevap

1

etkin socket.io istemcileri sunucuya bağlantı kaybettiğinde, sürekli çevrimiçi sunucu dönene kadar yeniden bağlanmayı deneyin başarıyla onlar olacak yeniden bağlanma. Bu normal ve beklenen davranıştır ve genellikle çok kullanışlı bir özelliktir, çünkü istemci otomatik olarak geçici bir sunucunun yeniden başlatılmasından veya ağ bağlantısının kesilmesinden sonra bir bağlantıyı otomatik olarak yeniden kuracaktır.

Test amacıyla baştan başlamak istiyorsanız, tüm istemci web sayfalarını kapatın, sunucunuzu kapatın, sunucunuzu yeniden başlatın ve istemci web sayfalarını tekrar açın. Sunucunuzu başlattığınızda istemci web sayfaları açılmayacağından, hemen bir sürü yeniden bağlantı kurmamalı.

İstemcinin otomatik olarak yeniden bağlanmasını istemiyorsanız, istemci kodu {reconnection: false} seçeneğiyle sunucuya bağlanan bir seçenekte belirtebilirsiniz (ancak bu genellikle istemcide başarısız olduğu için genellikle kötü bir fikirdir) Bağlantı geçici olarak kesilirse otomatik olarak kurtarılır.

+0

Anlamıyorum. Bir sunucuyla çalışan 10000 istemcim olduğunu ve her 10 saniyede bir mesaj gönderdiğimi varsayalım. Sunucu 10 dakika boyunca çalışmıyorsa, yeniden başlatıldığında 600.000 iletinin işlenmesi gerekecektir. Gerçek dışı. Bunu önlemek istiyorum. Nasıl yaparım? – Shlomo

+0

@Shlomo - socket.io nasıl tasarlanmıştır. Sunucu kapalıyken gönderdiğiniz iletileri tamponlar ve yeniden bağladıktan sonra gönderir. İstediğiniz davranış değilse, kod eklemeniz gerekir. Sunucu düştüğünde ve müşterilerin neyi önereceğini bilmek istediğinde, istenen davranış hakkında daha fazla bilgi sahibi olmak zorundayım. – jfriend00

+0

@Shlomo - Bu önceki soruya verilen cevap [SocketIO, x saniye sonra tekrar yayınlama işlemini durdur/ilk yanıt alma girişiminde başarısız oldu] (http://stackoverflow.com/questions/32131629/socketio-stop-re-emitting -evde-x-saniye-ilk-başarısız-girişimi-a-re-a-re/32261523 # 32261523) olası bir çözüm üzerinde bir ışık tutuyor (yeniden bağlandıktan sonra tamponlanmış verileri temizler), ama ben ' Tam olarak neye ihtiyacınız olduğunu bilmeden önce davranışın ne olmasını istediğinizi bilmeniz gerekir. – jfriend00

-1

Yaptığım şey: İstemcide, her saniye çağrılan (setTimeout) bir monitör işlevi ekledim ve socket.connected'ı denetledim. Bağlı değilse, doğru (bağlı) olduğunu görene kadar sunucuya hiç ileti göndermiyorum. Bu, sorunu çözdü.

+0

Bu gerçekten çok sağlam bir çözüm değil çünkü zamanlayıcınızın çalıştıracağı süre arasında ve bağlantının daha fazla bağlanıp bağlanamayacağı şekilde işaretlendiğinde çok fazla yarış durumu var. Eğer bunu bu şekilde yapacaksanız, o zaman sokete bağlandığında HERHANGİ zaman veri göndermek istediğinizi kontrol etmelisiniz. Zamanlayıcıya gerek yok. – jfriend00

+0

İyi nokta. Ekleyeceğim, ancak kullanıcı için hatayı göstermek için zamanlayıcıya ihtiyacım var. – Shlomo

+0

Bağlantı kaybolduktan ve yeniden kurulduğundan emin olmak için mesajları kullanabilirsiniz. Bayrağı yoklamak için gerek yok. – jfriend00

İlgili konular