私はwebtocketを設定するためにシングルトンパターンを使用しています。 Client SideからNode.jsのSocket.ioを使用してルートファイルを生成する方法
var sio = require('socket.io')
var io = null;
exports.io = function() {
var socket;
if(io === null){ // Initialise if not already made
io = initialize(server);
}
return io;
};
exports.initialize = function(server) {
io = sio.listen(server);
var connections = [];
console.log('IO Initialized!\n')
io.on('connection', function(socket){
connections.push(socket);
console.log('Connected: %s sockets connected', connections.length);
socket.on('disconnect', function(data){
connections.splice(connections.indexOf(socket), 1);
console.log('Disconnected: %s sockets connected', connections.length);
});
// Update function used to send messages to and from backend
socket.on('update', function(data){
io.sockets.emit('new message', {msg: data});
});
});
};
そして、私のjavascript /公共のファイルに私はルートファイルから成功裏に発することができる
router.use(function(req, res, next){
if(socket === undefined){
socket = io.io();
}
next();
});
router.get('/', function(req, res, next){
socket.on('update', function(data){
console.log('in routes');
});
socket.emit('update', 'leaving routes');
});
私が持っているので、
$(function(){
var socket = io.connect();
socket.emit('update', 'Test Update');
socket.on('update', function(data){
console.log('here: ' + data);
});
});
のように、私のルートファイルでこれらを呼び出すことができますパブリックjsファイル(バックエンドからフロントエンドまで)にコピーします。しかし、パブリックjsファイルからルートファイルに情報を送信することはできません。シングルトンパターンのjsファイルにのみ送信されます。代わりにルートファイルに送信するにはどうすればいいですか?私がこれについて間違ったやり方をしているのなら、誰かが経路とパブリックjsファイルの間のやりとりの方法を教えてください。
あなたは 'socket'が何であるのか誤解しているのが分かります。それはすべての着信クライアント接続のためのユニークなオブジェクトです。それはシングルトンではありません。あなたは単にそれをグローバルとして参照することはできません。実際、あなたが実際に使うことができる唯一の場所は 'io.on( 'connection'、.... ....)ハンドラの中です。なぜなら、それはそれぞれの新しい' socket'オブジェクトに接続を提供するからです。あなたのルートでやろうとしていることが、その瞬間にリクエストを出している特定のユーザに対応するソケットオブジェクトにアクセスすることであれば、それはまったく異なる質問です。 – jfriend00
「エクスプレスルート内のアクセスsocket.io接続」をここで検索し、見つけたものを表示することをお勧めします。 2つを接続する通常の方法は、セッションオブジェクトを介して行います。そして、socket.io接続が接続されたときに、セッションの初期化を行います。その結果、後でルートでセッションを見ると、そこからsocket.idにアクセスできます。ソケットオブジェクトを取得できます。 – jfriend00