2012-03-02 18 views
16

私はsocket.ioを試してみましたが、クライアントのhtmlページの読み込み時に新しいソケット接続が作成されました。ページを更新すると、新しいソケット接続が作成され、古い接続が切断されました。htmlページの更新後にsocket.ioで新しいソケット接続を作成しないようにするにはどうすればいいですか?

私の問題はこれを回避する方法です。私はチャットルームアプリケーションを構築しているからです。ユーザーが部屋のページに入ると、 "接続"サービス側が "Welcome user xxx come!"を出し、 "disconnec"イベントで "User xxx leaved"を出します。しかし、ユーザーが現在のページをリフレッシュすると、これは 'disconnect'イベントとfilre 'connected'イベントを再び発生させます。そして、「Welcome user xxx come!」を発行します。 「User xxx leaved」と表示されます。一緒にメッセージ。

ページリフレッシュイベントを無視する方法は?httpセッションと同様ですか?


更新:私はすでにこの問題を解決する方法を発見しました。この質問からHandle browser reload socket.io

答えて

19

ページの更新をブロックすることはできません。また、ユーザーがページを更新するときにsocket.io切断を回避する方法はありません。

私はタイムアウトを追加することを示唆している:、

  • ユーザーが切断見られているときにタイマーを開始、タイマーが終了していない一方で、ユーザーがチャットに戻った場合は、10〜30秒
  • を言いますユーザータイマー終了後に戻っていないた場合は、メッセージし、「ユーザーは残している」と表示、
+0

この問題のための「セッションのような」ソリューションはありますか? – qichunren

+3

クライアントのソケットはブラウザにあり、ページがリロードされると、クライアント側のJSコードとそのページの状態はすべて破棄されます。 –

8

あなたがセッションを使用することができますが何も

  • をしません。リフレッシュが発生したときにソケットが切断されても、その特定のユーザーのデータを保持して、ソケットが再び接続されるたびにそのデータを使用できます。

    は、ここでは、セッションを使用方法は次のとおりです。

    var express = require('express');  
    var MemoryStore = require('express').session.MemoryStore; 
    
    app.use(express.cookieParser()); 
    app.use(express.session({ secret: "keyboard cat", store: new MemoryStore({ reapInterval: 60000 * 10 })})); 
    
    app.get('/', function(req,res){ 
        req.session.name ="clients_name"; 
        res.render(__dirname + '/index.jade',{user:req.session.name}); 
    }); 
    

    と、ページに渡されたデータを取得するためにヒスイや他の「ビューエンジン」を使用する必要があります。

  • 関連する問題