0

node.js と socket.io を使用して、ページ アドレス (/homepage または /events など) を含むメッセージを node.js サーバーに送信することにより、自分の Web サイトの特定のページを現在何人のユーザーが閲覧しているかを表示したいと考えています。アドレス名 (つまり、homepage.txt または events.txt) を持つファイルを読み書きし、現在のカウントを取得して 1 を追加し、それをファイルに書き戻します。次に、切断時に同じことを行いますが、代わりに 1 を削除して保存します。

これまでのコードは次のとおりです。現在、テスト用に fs 関数を除外しています。また、サーバー ファイルとクライアント ファイルは同じディレクトリにあります。

クライアント:

<?php
    $url = $_SERVER["REQUEST_URI"];
?>

<body style="overflow: hidden;" />

<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="/node_modules/socket.io/lib/socket.io.js"></script>

<script>

    var socket = io.connect('http://localhost:5000');

    socket.on('connected', function (data) {
        $("#log").append('Connected!<br />');
        $("#log").append(data + "<br />");
        socket.emit('viewing', { page: '<?php echo $url; ?>' });
            socket.on('disconnected', function(data) {
            $("#log").append("User Disconnected" + "<br />");
        });
    });

</script>

<div id='log' style='height: 100%; border: 1px solid black;'></div>

サーバ:

var io = require('socket.io').listen(5000);

var connected_users = 0;

io.sockets.on('connection', function(socket) {
    connected_users++;
    console.log("User Connected!");
    socket.emit("connected", { message: "Users Online: " + connected_users + "!" });

    socket.on('viewing', function(data){
        console.log("User Is Viewing: " + data);
    });

    socket.on('disconnect', function(){
        connected_users--;
        console.log("User Disconnected!");
        socket.emit("disconnected", { message: "Users Online: " + connected_users + "!" });
    });
});

しかし、何らかの理由でこれが機能していないようです。サーバーが言うのは「info - socket.io started」だけで、ユーザーがクライアントページに接続しても他には何もありません

私が間違っているかもしれないことについてのヒント/アイデア。

よろしくお願いします -- Vinny

4

2 に答える 2

2

また、サーバー側の socket.io コードが含まれているようです。正しいスクリプト タグは次のようになります。

<script src="http://localhost:5000/socket.io/socket.io.js"></script> 
于 2013-01-13T09:54:42.883 に答える
1

あなたが書いた行には、コードにいくつかの問題があります。

socket.on('viewing', function(data){
    console.log("User Is Viewing: " + data);//it should be data.page
});

また、disconnectサーバー側でイベントが発生した場合、ユーザーは既にページを離れており、ソケットは閉じられているため、クライアントに何も送信できません。これに対する解決策はdisconnected、クライアント側からイベントを送信することです。イベントなど、ユーザーがページを離れたことを示すイベントがありますonbeforeunload

于 2013-01-13T02:49:55.943 に答える