私はこのガイドに従っています: http://www.danielbaulig.de/socket-ioexpress/ to link express.js to socket.io 見事に動作します。
ユーザーが1つのページ(セッションオブジェクトを設定するexpress.js POSTリクエスト)にログインし、認証されると、socket.ioがロードされ、サーバー上でsocket.ioがセッションを取得できる新しいページに誘導しますエクスプレスから設定されました。すべてが正常に機能するように。
現在、socket.io を使用するページにユーザーがいて、そのページが更新されると、socket.io 接続がまだ存在することがあります (つまり、切断されません)。私がやろうとしているのは、io.set('authorization')
関数を変更して、ユーザーが接続したときに、そのクライアントに対してまだ開いているすべての既存の socket.io インスタンスを切断することです。
現時点での様子は次のとおりです。
//socket.io connect to express
var parseCookie = require('connect').utils.parseCookie;
io.set('authorization', function (data, accept) {
if (data.headers.cookie)
{
data.cookie = parseCookie(data.headers.cookie);
data.sessionID = data.cookie['express.sid'];
// (literally) get the session data from the session store
sessionStore.get(data.sessionID, function (err, session)
{
if (err || !session)
{
// if we cannot grab a session, turn down the connection
//note: a session is created when the user logs in
accept('Error', false);
}
else
{
//TODO something here before we accept the connection
//??
// save the session data
data.session = session;
//accept the connection
accept(null, true);
}
});
}
else
{
return accept('No cookie transmitted.', false);
}
});
受け入れようとしているクライアントに以前の接続があり、それがまだ開いているかどうかを確認するにはどうすればよいですか (したがって、その古い接続を切断する必要があります)。
エクスプレスセッションには「ユーザー名」が含まれているため、セッションオブジェクトを取得してユーザー名を取得できます。すべてのsocket.ioクライアントのリストを調べてエクスプレスを見る方法がわかりませんそれぞれのセッションを調べて、現在認証しているユーザーと同じかどうかを確認します。