【问题标题】:Using Socket.IO to show object count within Compound.js使用 Socket.IO 在 Compound.js 中显示对象计数
【发布时间】:2013-02-22 16:44:25
【问题描述】:

我正在为一个使用 Compound.js(基于 node.js/Express.js 构建)的新项目测试 Socket.IO,但我遇到了一个问题。我已经设法使基础工作正常,以下消息工作正常:

服务器端 JS (applicationname/config/initializers/socketio.js):

var sio = require('socket.io');
var http = require('http');
var activeClients = 0;

module.exports = function (compound) {
    var app = compound.app;
    var server = http.createServer(app);
    compound.server = server;
    var io = compound.io = sio.listen(server);

    io.sockets.on('connection', function (socket) {
        activeClients +=1;

        var connections = setInterval(function () {
            socket.emit('news', { clients: activeClients });
        }, 1000);

        socket.on('disconnect', function () {
            activeClients -= 1;
            io.sockets.emit('user disconnected');
            clearInterval(connections);
        });
    });
}

前端JS(applicationname/public/index.html):

<script src="/socket.io/socket.io.js"></script>
<script>
      var socket = io.connect('http://localhost');

      function msgReceived(msg){
        $clientCounter.html(msg.posts);
      }

      $(document).ready(function () {
        $clientCounter = $("#client_count");
        socket.on('news', function (data) {
            msgReceived(data);
            socket.emit('my other event', { my: 'data' });
          });
      });
</script>

我现在要做的是获取服务器上发布的帖子数量。我使用默认的脚手架来生成 Posts 方法、控制器和视图。

我现在如何找到帖子总数并将该值传递给服务器端 JS?

【问题讨论】:

    标签: javascript node.js express socket.io


    【解决方案1】:

    只需计算服务器端的发射次数并发送?

        ...
        var emits = 0;
        var connections = setInterval(function () {
            emits++;
            socket.emit('news', { clients: activeClients , num_messages: emits});
        }, 1000);
    
        ...
    

    或者创建可以从客户端轮询的特定消息

    【讨论】:

    • 我不确定这会有什么帮助。我有一个帖子模型(想想博客帖子),并且想计算要在前端显示的帖子数量,这样当有人创建新帖子时,新的帖子总数就会推送给所有用户。我不知道计数排放对这有什么帮助?
    • 你是对的 - 这无济于事。但是,您的代码在某种程度上具有误导性。 imo所有这些都与socket.io无关,或者是吗?实际上,在不知道您如何存储博客文章的情况下......简单地从您肯定使用的持久性存储中检索它们并简单地计算它们然后发出这个数字呢?
    • 嗯,这就是实际问题本身 - 最后一行,“我现在如何找到帖子总数并将该值传递给服务器端 JS?”。我无法弄清楚双方,因此提出了问题。
    • 再次:从持久存储中读取帖子的数量并通过 socket.emit("news", {number_of_posts: readFromPersistentStore()});给客户。
    猜你喜欢
    • 2015-09-30
    • 1970-01-01
    • 1970-01-01
    • 2018-03-12
    • 2021-04-10
    • 1970-01-01
    • 2019-01-22
    • 1970-01-01
    • 2018-09-19
    相关资源
    最近更新 更多