奇妙な問題私は実際にドキュメントを発見していません。私はそれが "あなたが製品の仕組みを理解していない"という単純なケースに終わるかもしれないと思います。誰かがギャップを埋めることを望んでいます。Socket.io複数の接続
ここには何が起こっているのですか...私はsocket.ioサーバーである3つの別個のアプリケーションを持っています。彼らはすべて異なるポートでリッスンしています。各サーバーは、異なる特殊目的を目的としています。私はアプリケーションを構築してそれを部分的に拡張し、変更/更新する必要のある個々の独立した部分にのみ影響を与えます。
これは正常に動作していました。実行しているアプリケーションごとに、サーバーあたりのソケット接続がであることが分かりました。だから私は3つのアプリを持っている場合、私は各サーバー上の3つの接続があります。
これは、各サーバーにconsole.log( "Connected")を追加してクライアントを接続すると、各サーバーはサーバーと同じ数の接続を報告するという証拠です。うまくいけば、これは理にかなっている。
私の目標は、サーバーあたり1つの接続が必要なのですか?接続がすべてすべてのソケットサーバーへの汎用接続として機能しているようです。私のサーバーのリスナーは、このように設定されています
io = require('socket.io').listen(26265) // can use up to 26485
私のクライアントは、次のように接続します。
socket = new io('http://localhost:26265')
EDIT:あなたはより多くのコードを見ることができるように
が私の元の質問へ追加します。 ..
完全なクライアントコード:
importJS('/js/pages/admin_base.js',function(){
AdminIO = new io('http://localhost:26266');
AdminIO.on('send_users',function(rows){
toggleLoad();
/*
if(typeof rows === 'object'){
rows = Array(rows);
}
*/
appendUsers(rows);
console.log(rows);
});
AdminIO.on('failed_users',function(){
toggleLoad();
dropInfo("Failed to retrieve userlist",{level: "error"});
});
AdminIO.on('test',function (q) {
console.log(q);
});
queryUsers(AdminIO);
});
サーバーコードが...かなり長いですので、関連部分は以下のとおりです。
var io = require('socket.io').listen(26266); // can use up to 26484
//.... imported additional modules and defined simple functions here
io.on('connection', function (socket) {
socket.on('restart_request', function(req){
var success = false
, session = JSON.parse(req.session)
, sessionID = session.sessionID;
checkSession(sessionID, function (ses) {
if (ses === false) { console.error('CheckSession failed: No session exists'); return; }
if (ses.user.uuid !== session.uuid) { console.error('CheckSession failed: UUID mismatched'); return; }
if (ses.user.role < conf['Permissions']['lm_restart']){ socket.emit('restart_fail','Insufficient permissions.'); return; }
if(process.platform === 'win32'){
executeCMD('START "" .\\windows\\scripts\\restart_lm.bat',function(err,res){
var errSent = false;
if(err){
console.error(err);
if(!errSent){ socket.emit('restart_fail','Restart failed'); }
errSent = true;
if(res === null){return;}
}
console.log(res);
socket.emit('restart_success','LM successfully restarted.');
});
}
else if(process.platform === 'linux'){
}
});
});
socket.on('get_users',function(req){
var success = false
, session = JSON.parse(req.session)
, opts = req.opts || null
, sessionID = session.sessionID
, col = opts.col || null
, where = opts.where || null
, range = opts.range || null
;
checkSession(sessionID, function (ses) {
if (!ses) { console.error('CheckSession failed: No session exists'); return; }
if (ses.user.uuid !== session.uuid) { console.error('CheckSession failed: UUID mismatched'); return; }
if (ses.user.role < conf['Permissions']['lm_user_query']){ socket.emit('userQuery_fail','Insufficient permissions.'); return; }
Query.users({col: col, where: where, range: range},function(err,res){
if(!err){socket.emit('send_users',res);}
else {socket.emit('failed_users',true);}
});
});
});
socket.on('test',function(q){
socket.emit('test',q);
});
});
複数の接続で何が問題になっていますか? – SLaks
複数の接続であれば問題ありません。問題は、複数の接続ですべての.emit()コマンドが複数回実行されることです。これは無駄な時間/ネットワークリソースを多く意味します – Ethan
あなたは間違った場所や間違った場所に出ているようです。 – SLaks