首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Socket.io在Node.js后端路由中

Socket.io在Node.js后端路由中
EN

Stack Overflow用户
提问于 2017-09-11 12:02:00
回答 1查看 391关注 0票数 0

好吧。所以我试着让socket.io进入我所有的特快路线。

我的代码的一部分:

代码语言:javascript
运行
复制
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;

然后我在其他文件中按如下方式调用它。

代码语言:javascript
运行
复制
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在主文件中调用了以下命令:

代码语言:javascript
运行
复制
var ships_model = require('./app/gamemodels/ship_model.js');

      ships_model.hijack(req.user, req.body.id).then(function (result) {

                res.json(result);
            });

请注意:我尝试注入IO,如下所示:

代码语言:javascript
运行
复制
var ships_model = require('./app/gamemodels/ship_model.js')(io);

但那只会产生错误。

另一个例子:

是否可以在某些函数中发出套接字发出调用?我只想向客户端发送数据。

或者推送服务器侧是如何工作的,这也可以用套接字来完成吗?

客户端请求如下服务器端

代码语言:javascript
运行
复制
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);
            });
});

银行:

代码语言:javascript
运行
复制
    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)
}

    }

备注二:我已经研究过事件,但没有结果。

那么,我如何在我的特快路线内实现呼叫socket.emit呢?

附加结构代码:

主文件:

代码语言:javascript
运行
复制
var ships_model = require('./app/gamemodels/ship_model.js');

 ships_model.createShipInterface(req.user._id).then(function (response) {
            res.json(response);
        });

ship_model文件具有以下结构:

代码语言:javascript
运行
复制
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,

};
EN

回答 1

Stack Overflow用户

发布于 2017-09-11 18:45:49

根据你的评论

那么,我如何在我的特快路线内实现呼叫socket.emit呢?

在我们的项目中,我们所做的是创建一个套接字服务器和快速服务器。因此,快递服务器(服务器-套接字)和浏览器(客户端-套接字)都是套接字服务器的客户端。

因此,每当快递服务器想要向浏览器发送什么东西时,它都会将数据发送到我们希望发送到的浏览器标识符( socket -Id或其他客户端套接字的唯一标识符)到socket服务器。然后套接字服务器使用标识符将数据发送到特定的浏览器。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46155302

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档