私はオンラインのテキストベースのRPG(Github)を開発中です。私は現在、セッションデータをRedisサーバーに保存するPHPバックエンドを持っています。リアルタイムコミュニケーションが必要なすべてのもの(チャット、メッセージング、接続されたユーザのリスト)では、私はNode.jsとsocket.ioをWebソケット用に使います。socket.io、redisでsocket.idとしてPHPセッションを使用
私は私のWebSocketサーバ上で現在3名前空間を持っている:
- メッセージングサーバー
- オンラインサーバー
- チャットサーバー
私はそれが仕事作ったが、私は怖いですそのほとんどは「ハッキング」から作られています。今、私は特定のクライアントにメッセージを送信するのに問題があります。たとえば、別のユーザーに私的なメッセージを書いている場合、「送信」をクリックすると、次のロジックが必要になります。
- 彼は、クライアントがWebSocketのサーバーへのWebSocketサーバーで
{"sender": 15, "message": "blablabla", "receiver": 17};
のようなものを放出し、サーバーがイベントを取得し、そこから私は揃える必要があり、「送信」をクリックすると、ユーザーは、彼のメッセージを書いています"レシーバ"とクライアントセッション。名前空間への接続ごとに、私はAuthモジュールの結果であるaccountIdとaccountNameという2つのプロパティをソケットオブジェクトに追加します。私はビルトインsocket.idを使用せずに、特定のクライアントにイベントを発することができる方法
/* POSTA SERVER */ postaServer.on('connection', function postaConnect(socket) { var phpSessId = cookie.parse(socket.request.headers.cookie) .PHPSESSID; if (phpSessId === undefined || phpSessId === '') { console.log('Sessione non trovata'); socket.disconnect(); } else { // modulo socket_auth checkSession(phpSessId, function (auth) { if (auth) { // Auth retrieves account id and account name from redis socket.accountId = auth.id; socket.accountName = auth.nome; socket.emit('serverMessage', 'connesso al server di posta'); var conn = mysql.createConnection(DB); getMessaggiPosta(socket.accountId, conn, function (err, result) { if (err) { console.log(err); } else { socket.emit('refreshPosta', result); } }); } else { socket.disconnect(); } }); } });
?