さまざまなブラウザーを使用して自分のマシンでテストするチャット スクリプトを設計しています。私はsocket.ioで特定のユーザーにメッセージを送信しようとしているので、ここにあります:
client:
socket.on('msgFromServer', function (data) {
message = data['message'],
from = data['from'],
to = data['to'];
if($('#chatbox.'+from).dialog("isOpen") === true){
$('#chatbox.'+from+' #messageOutput textarea.readOnly').text(message);
}
else if(($('#chatbox.'+from).dialog("isOpen") !== true)){
createChatbox(from,to,message);
}
});
server:
var users = {};
io.sockets.on('connection', function (socket) {
if( ( users.hasOwnProperty(req.session.name) === false))
users[req.session.name] = socket;
socket.on('msgToServer', function (data) {
for (var u in users){
console.log("%s | %s",u,users[u]);
}
});
});
さて、サーバーに関係するコードの構造についてお話します。「接続」イベントでユーザーを保存する役割を果たします。ページをリロードすると問題が発生します。ブラウザAのユーザーをユーザーオブジェクトに保存し、リロードして再接続すると再度保存しますが、ブラウザBのユーザーオブジェクトの内容を尋ねると...情報時代遅れであり、ユーザーが空の場合に val を格納するために nullity のチェックを試みているにもかかわらず、ブローザー A のオブジェクトの内容を尋ねたときと同じ結果が表示されません --> if( ( users .hasOwnProperty(req.session.name) === false))。基本的に、私が必要としているのは、識別子( req.session.name)、すべてのブラウザのすべてのセッションでそのようなコンテナを利用できるようにするため、サーバーがブラウザ A からブラウザ B へのメッセージを受信すると、それを識別してブラウザ B に応答を送信できます。
https://github.com/generalhenry/specificUser/blob/master/app.js とhttp://chrissilich.com/blog/socket-io-0-7-sending- _個々のクライアントへのメッセージ/
コードを注意深く見ると... chrissilich.com では、著者は「socket.id」(users[incoming.phonenumber] = socket.id) を保存する必要があると述べていますが、git generalhenry では、そうしなければならないと述べています。 'socket'(users[myName] = socket) リソースを保存します。socket.id の値は両方のブラウザーで同じになる傾向があるため、後者が正しいものです...そしてその値は自動的に変更されます。なぜそこにあるのかわかりません...以前のバージョンのノードではそれがあったと思いますそのように働きました。