sails.js套接字生存期。取消订阅是否必要?

时间:2014-11-28 22:58:40

标签: sockets sails.js lifetime

我的sails应用程序返回主要呈现的视图。我没有使用任何客户端前端js框架,因此返回JSON或XML没有意义。在我看来,我有这个js。


io.socket.get
(
    location.pathname,
    function(model)
    {
        if(typeof model !== 'undefined' && typeof model.error === 'undefined' && model !== null && model)
        {
            io.socket.on
            (
                model,
                function(event)
                {
                    console.log(event);
                }
            );
        }
    }
);

我的控制器没有严格映射到模型。这是一种意大利面条编码,但我不知道怎么做。餐厅包含销售点机器(POS)。在我的餐厅控制器中,我有


    detail: function(req, res)
    {
        Restaurant.findOne
        (
            {
                where:
                {
                    owner: req.session.owner.id,
                    id: req.params.id
                }
            }
        )
        .populate('POSs')
        .exec
        (
            function(err, restaurant)
            {
                if(err)
                {
                    res.serverError(err);
                }
                else if(typeof restaurant === 'undefined')
                {
                    res.notFound();
                }
                else
                {
                    Restaurant.count
                    (
                        {
                            owner: req.session.owner.id
                        }
                    )
                    .exec
                    (
                        function(err, num)
                        {
                            console.log(req.socket.id);
                            if(req.isSocket)
                            {
                                POS.subscribe(req.socket, restaurant.POSs);
                                res.send('pos');
                            }
                            else
                            {
                                res.view({restaurant: restaurant, count: num});
                            }
                        }
                    );
                }
            }
        );
    }

现在问题是我需要取消订阅吗?如果我离开页面,似乎我将有一个不同的套接字ID。服务器是否仍然认为旧套接字仍在订阅并将消息推送到旧套接字?即如果我转到触发餐厅控制器中的“详细信息”路径的路径,刷新并执行从另一个控制器触发POS.publishUpdate(pos.id, {status: pos.status});的ajax请求,即使只有一个套接字,风帆也需要通知两个套接字还活着的当前套接字?

1 个答案:

答案 0 :(得分:0)

经过一番调查后,我打开了config / sockets.js,看到了onConnectonDisconnect函数。我添加了一些日志记录并确定页面刷新,套接字无论如何都会断开连接。因此,可以安全地假设不需要取消订阅