私はNode.jsとSocket.IOでマルチルームチャットアプリを書いています。トランスポートがxhr-pollingのときに、セッションの持続時間を維持する必要のあるデータをどう扱うかと思います。xhrポーリングを伴う永続データをSocket.IOに保存するにはどうすればよいですか?
現在、クライアント上では、接続時に(ユーザー名などの)長い変数を渡す「結合」イベントを送信しています。これは、Socket.IOのgetおよびsetメソッドを使用してサーバー側を格納します。これらは、クライアントが切断するまで利用可能です。
トランスポートがWebsocketの場合は正常ですが、xhrポーリングに戻った場合は、各接続で5〜10秒ごとに発生します。私は前方に最善の方法が何であるかわからないんだけど
(同様に、望ましくない各XHRポーリング要求、上で送信されます。「などと、このようなは/部屋が参加を残しています」)。私はxhrポーリングを無効にすることはできません。なぜなら、フラッシュレスIEのために必要なフォールバックだからです。
socket.on("connect", function(){
socket.emit("join", { username: username, room: room });
});
、サーバー上:事前に
var io = require("socket.io").listen(8124)
, buffer = {}
, max_room_buffer = 15;
io.sockets.on("connection", function(socket) {
socket.on("join", function(data){
if(data.username && data.room) {
socket.set("data", data);
socket.join(data.room);
if(!buffer[data.room]) buffer[data.room] = [];
socket.broadcast.to(data.room).emit("message", "<em>" + data.username + " has joined room " + data.room + "</em>");
socket.emit("message", "<em>You have joined room " + data.room + "</em>");
socket.emit("message", buffer[data.room]);
}
});
socket.on("message", function(message) {
if(message) {
socket.get("data", function(err, data){
if(data) {
var msg = "<span>" + data.username + ":</span> " + message;
buffer[data.room].push(msg);
if(buffer[data.room].length > max_room_buffer) buffer[data.room].shift();
io.sockets.in(data.room).emit("message", msg);
}
});
}
});
socket.on("disconnect", function() {
socket.get("data", function(err, data){
if(data) {
socket.leave(data.room);
socket.broadcast.to(data.room).emit("message", "<em>" + data.username + " has left room " + data.room + "</em>");
}
});
});
});
おかげでここ
は、関連するクライアントコードです。
私はsocket.io自体がその代わりのを扱うべきではないと思います開発者はそれを扱う..奇妙な。 「その同じこと –
は、わからない、「AJAXマルチストリーミング」であればわからない、サポートされるだろうが、私はすることができますGoogle上で何かを見つけたようです。これに対処するためのベストプラクティスがありますが、socket.ioの新機能です。 –
は、私は、これはすべてのチャットアプリはsocket.ioとに実行し、問題なければならないことを考えた場合、私はチャンク転送エンコードのようなものを推測 – Mottokrosh