私はこれらの技術に不慣れです。
サイトの各製品のリアルタイムの訪問者を取得したい。「X ユーザーがこの製品を見ています」のような通知を意味します。
ユーザーが製品に接続するたびに、この製品のカウンターが増加し、切断されると、この製品だけのカウンターが減少します。
たくさんのドキュメントを検索しようとしましたが、混乱しました。
PHP用のPredisライブラリを使用しています。
私がしたことは完全に間違っているかもしれません。createClient をどこに配置するか、いつ購読するか、いつ購読を解除するかがわかりません。
私がまだやったこと:
商品詳細ページ:
$key = "product_views_".$product_id;
$counter = $redis->incr($key);
$redis->publish("productCounter", json_encode(array("product_id"=> "1000", "counter"=> $counter )));
app.js 内
var app = require('express')()
, server = require('http').createServer(app)
, socket = require('socket.io').listen(server,{ log: false })
, url = require('url')
, http= require('http')
, qs = require('querystring')
,redis = require("redis");
var connected_socket = 0;
server.listen(8080);
var productCounter = redis.createClient();
productCounter.subscribe("productCounter");
productCounter.on("message", function(channel, message){
console.log("%s, the message : %s", channel, message);
io.sockets.emit(channel,message);
}
productCounter.on("unsubscribe", function(){
//I think to decrease counter here, Shold I? and How?
}
io.sockets.on('connection', function (socket) {
connected_socket++;
socket_id = socket.id;
console.log("["+socket_id+"] connected");
socket.on('disconnect', function (socket) {
connected_socket--;
console.log("Client disconnected");
productCounter.unsubscribe("productCounter");
});
})
ご回答ありがとうございます。