socket.io内部node.js后端路由



好的。因此,我正在尝试在我所有的Express路线内获取socket.io。

我代码的一部分:

var port = process.env.PORT || 3000;        // set our port
var server  = app.listen(port);
var  io = require('socket.io')(server);
app.io = io;
exports.io = io;

然后我称其为其他文件中的以下方式。

var app = require('../../server');
var io = app.io;
function hijack(user,boatid) {
    console.log("????");
    console.log(user);
    app.io.sockets.emit("myevent",{ test: 22});
    var userid = user._id;
console.log(user);

}
module.exports = {
    hijack : hijack(app),

};

但是,似乎hijack函数内部的用户参数现在被应用程序占有,如果我添加了一个exstra参数,它仍然不知道用户参数,如im在主文件中呼叫以下内容:

var ships_model = require('./app/gamemodels/ship_model.js');
      ships_model.hijack(req.user, req.body.id).then(function (result) {
                res.json(result);
            });

请注意:我尝试注入IO喜欢以下内容:

var ships_model = require('./app/gamemodels/ship_model.js')(io);

但这只是产生了错误。

另一个示例:

是否可以在某些功能中进行插座发出调用?我只想将数据寄给客户端。

或推动器服务器侧面如何工作,也可以使用套接字完成吗?

客户端请求如下,服务器侧面

var bankfactory = require(path.resolve('./modules/articles/server/factory/user_factory.js'));

 app.post('/api/bank', function (req, res) {
bankfactory.bank_inn(req.user._id,amount).then( function (bankresult) {
                res.json(bankresult);
            });
});

bankFactory:

    exports.bank_inn = bank_inn;

    function bank_inn(playerid,amount) {
if (playerid == 1) {
} else {
    // possible to make a emit call to the client here?
//emit("newevent,datahere)
}
    }

注意两个:我已经研究了eventemiter,但没有结果。

所以,我该如何达到插座。

其他结构代码:

主文件:

var ships_model = require('./app/gamemodels/ship_model.js');
 ships_model.createShipInterface(req.user._id).then(function (response) {
            res.json(response);
        });

ship_model文件具有以下结构:

module.exports = {
    getShips: getShips(),
    createShipInterface : createShipInterface,
    allowedLocationsShips : allowedLocationsShips,
    startMissionInterface : startMissionInterface,
    deligateShipMovements: deligateShipMovements,
    upgradeBoat : upgradeBoat,
    deletedBoats: deletedBoats,
    hijackSession : hijackSession,
    boats_to_hijack : boats_to_hijack,
    avaliable_boats : avaliable_boats,
    createHijackSession : createHijackSession,
    public_hijack : public_hijack,
    joinHijackSession : joinHijackSession,
    leavehijack : leavehijack,
    sendMessageToMembers : sendMessageToMembers,
    KickMember : KickMember,
    togglePublic : togglePublic,
    getHangar : getHangar,
    hijack : hijack(app),
    getHangarSession: getHangarSession,
    updateUserLocation : updateUserLocation,
};

根据您的评论

那么,我该如何在我的快速路线内拨打socket.emit?

在我们的项目中,我们所做的是创建套接字服务器和Express Server。因此

因此,每当Express Server想要将某些内容发送到浏览器时,它就会使用浏览器标识符(套接字ID或其他唯一的客户端套接字标识符)将数据发送到套接字服务器。然后使用标识符将数据发送到特定浏览器。

最新更新