【问题标题】:node.js socket.io page viewersnode.js socket.io 页面查看器
【发布时间】:2013-01-13 02:30:23
【问题描述】:

我想使用 node.js 和 socket.io 通过向 node.js 发送带有页面地址(即 /homepage 或 /events)的消息来显示当前有多少用户正在查看我网站上的某个页面服务器,然后读取/写入具有地址名称的文件(即 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 + "!" });
    });
});

但由于某种原因,这似乎不起作用,服务器所说的只是“信息 - socket.io 已启动”,当用户连接到客户端页面时没有其他任何内容

关于我可能做错的任何提示/想法。

提前谢谢你——文尼

【问题讨论】:

    标签: php node.js socket.io


    【解决方案1】:

    您似乎还包括服务器端 socket.io 代码。正确的脚本标签是这样的:

    <script src="http://localhost:5000/socket.io/socket.io.js"></script> 
    

    【讨论】:

    • 哇,我想说这不重要,因为 socket.io.js 对于客户端页面和服务器脚本都在同一个相对目录中,但这确实有效,非常感谢,只有 1 个问题,如何摆脱 socket.io 调试消息,它们让我很烦
    • 要隐藏调试消息,在“var io = ...”行下添加:io.set('log level', 1);此处解释了可能的日志级别:github.com/LearnBoost/Socket.IO/wiki/Configuring-Socket.IO
    • 谢谢,我居然想通了 ".listen(5000, { log: false })"
    【解决方案2】:

    在你写的那一行,你的代码有一些问题。

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

    此外,当disconnect 事件发生在服务器端时,用户已经离开页面并且套接字已关闭,因此您无法向客户端发送任何内容。解决方案是从客户端发送disconnected 事件。有些事件表明用户离开了页面,例如onbeforeunload 事件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-04-30
      • 2017-06-14
      • 1970-01-01
      • 2010-11-18
      • 1970-01-01
      • 2018-11-18
      • 1970-01-01
      相关资源
      最近更新 更多