2013-02-16 9 views
9

Kullanıcının sürekli bağlı olması gereken bir web uygulamasına sahibim. Varsayılan olarak, socket.io bağlantıyı 60 saniye sonra kesecek. Yine de 'yeniden bağlanma' seçeneğim var, bu yüzden bağlantıyı her dakika kapatıyor ve yeniden açıyor. Bu bağlı müşterilerime besleme/bildirim ile ilgili sorunlara neden olabilir. Bu zaman aşımını 10 dakika ya da muhtemelen daha yüksek bir düzeye getirecek şekilde ayarlamak güvenli olur mu? Şu anda bu kadar düşük olmasının bir nedeni var mı?Soket.io'da yüksek yakın zaman aşımı ayarlamak güvenli midir?

cevap

3

Soketinizin 60 saniye sonra bağlantısını kesmesi gerektiğine inanmıyorum. Bunun neden olduğunu araştırıyordum. Doğru bir şekilde tokalaştıktan sonra, soket kalp atışı yapmalı ve istemciye ya da sunucu bağlantıyı kapatana kadar süresiz olarak (ağ sorunlarınızı denetiminizin dışında bırakarak) açık kalmalıdır, bu kesinlikle benim deneyimimdir.

Bağlantınızın aslında kapanış gibi sesler kapatması veya kalp atışlarının alınmaması gibi sesler.

10

Tahminim, 'close timeout' yapılandırmasını yanlış yorumlamanız olabilir. Bağlantı 60 saniye sonra kapanmaya neden olmaz. (İstemciler sürekli olarak tekrar bağlanırsa kalp atışı anlamsız olurdu).

İstemci bağlantısı kesilirse, close timeout, sunucunun o bağlantıyla ilişkili kaynakları serbest bırakmadan önce bekleyeceği süredir. Esasen, bu, kesintili bağlantı sorunları olan istemcilerin, sunucu onları unutmadan önce yeniden bağlanmaya çalışmasına olanak tanır. Sunucu kaynaklarını bağlayacağından close timeout değerini on dakikaya ayarlamak muhtemelen kötü bir fikirdir.

İstemcileriniz, aslında, her 60 saniyede bir bağlantı koparsa, samjm'in dediği gibi, başka bir şey yanlıştır.

0

Bunu daha önce de düşünmüş olabilirsiniz, ancak sunucunuza bir kalp atışı ("2 ::") göndermediğiniz için 60 saniye sonra soketinizin bağlantısı kesilebilir.

Burada, websocket client module ile çalışan bazı Python kodları vardır.

# on_message handles messages from the server 
def on_message(ws, message): 
    if message[:3] == '2::': 
     ws.send('2::')