これはすでに何千回も尋ねられているに違いありませんが、満足のいく答えが見つからないので、できるだけ明確にして、もう一度試してみます.
私はクリーンな Express から始めています。通常、次の端末コマンドを介して実行されます。
user$ express
user$ npm install
次に、socket.io のインストールを次のように進めます。
user$ npm install socket.io --save
私の main.js ファイルには、次のものがあります。
//app.js
var express = require('express'),
http = require('http'),
path = require('path'),
io = require('socket.io'),
routes = require('./routes');
var app = express();
socket.io サーバーを Express サーバーに接続して起動します。
//app.js
var server = http.createServer(app).listen(app.get('port'), function(){
console.log('express server started!');
});
var sIo = io.listen(server);
私が今やっていることは、Express が動作する通常のルートを設定することです:
//app.js
app.get('/', routes.index);
app.get('/send/:recipient/:text', routes.sendMessage);
さて、私は物事を整理しておくのが好きなので、socket.io コードを別のファイルに入れたいので、通常のコードを使用する代わりに:
//app.js
sIo.sockets.on('connection', function(socket){
console.log('got a connection');
});
以下を使用して、ソケットとsIo オブジェクトの両方にアクセスできるようにします (そのオブジェクトにはすべての接続情報が含まれているため (重要))。
//app.js
sIo.sockets.on('connection', function(socket){
routes.connection(sIo, socket);
});
// index.js (./routes)
exports.connection = function(sIo, socket){
console.log('got a connection.');
};
このようにして、すべての socket.io ジョブをここで実行できます。sIo オブジェクトからすべてのクライアント情報にアクセスできることはわかっていますが、もちろん、セッション データに関する情報は含まれていません。
私の質問は次のとおりです。
ユーザーがメッセージを送信するために HTTP リクエストを作成し、ルートのハンドラーが次のようになっているとします。
exports.sendMessage = function(req, res){ //ここで処理を行います };
これを socket.io で何かを「起動」してメッセージを送信するにはどうすればよいですか? メッセージやユーザーなどを追跡するなど、実行する必要がある基本的な作業をすべて知りたいわけではありません。何かを行うために socket.io を「起動」する方法を理解したいだけです。
- socket.io がメッセージを特定の人にのみ送信し、他の誰もメッセージを受信しないことを 100% 確実にするにはどうすればよいですか? 私が見る限り、sIo オブジェクトからセッション情報を取得する方法はありません。
前もって感謝します。