【问题标题】:socket.io basic emit and listener failingsocket.io 基本发射和侦听器失败
【发布时间】:2016-12-13 03:43:52
【问题描述】:

我有一个我继承的应用程序,它的套接字 IO 已经在许多事件上工作。这是一款在棋盘上移动棋子并带有记录移动的符号的游戏。我正在构建符号。

我正在尝试为符号创建一个新的发射器/侦听器对,但它失败了。

我将发射器放在一个文件中,作为函数的一部分,该函数已经使用了我需要传递的两个对象(在我需要传递它们的时间/上下文中)...

function writeMoveLog(game,moveInfo){
    socket.emit('notation', {game: game, moveInfo: moveInfo});

    (...rest of the function which works ok)

而我的监听器就是主 js 文件中的这个...

    socket.on('notation', function(gameState){
        writeMoveLog(gameState.game, gameState.moveInfo);    
    });

基本上,我试图将这两个对象扔到套接字的另一个客户端,并让它也触发函数,更新符号。两个客户端使用相同的文件。

我正在使用与预先存在的“移动”事件相同的基本模式,它可以正常工作 - 由发射传递的未命名对象,然后在 on/listener 处命名和使用 - 这些都在相同的主 js 文件。

    socket.emit('move', {
       mInfo: result.mInfo,
       mResult: result,
       senString: gameGen.saveToSEN(game),
       mGame: {contents : game}, //I added this, it works
    });

    socket.on('move', function (move) {
        game = gameGen.loadFromSEN(move.senString);
        gui.draw(game.board);
        etc etc 

我在调试器中没有得到任何东西,没有任何“符号”事件,但我可以很容易地看到“移动”事件的内容来回移动。我已经尝试使用该事件,但它没有我在该上下文中需要的对象(完全是 moveInfo,而且游戏似乎缺少我需要的细节)。

我将 Chrome 开发工具用于我的主要开发环境,并将 Firefox 用于其他连接的客户端。

什么给了?我需要在其他地方以某种方式注册活动吗?我看不到'move'事件已经完成了,我认为我需要做的就是拨打电话并配置监听器,无论哪个客户端进行移动都将成为'notation'事件的服务器.

附带说明,当我调试 socket.io 的东西时,Chrome Dev 断点似乎没有按预期工作 - 这正常吗?为什么我不能在 socket.emit 中设置断点,以便我可以像使用其他函数一样调查该上下文中可用的对象?

【问题讨论】:

    标签: javascript angularjs node.js socket.io


    【解决方案1】:

    代码没有任何问题,请确保您已在您监听的前端包含 socket.js 脚本,并检查您的事件是否没有冲突。

    【讨论】:

    • 感谢您的快速回复-您能详细说明事件不是“碰撞”吗?如果您有两个针对同一事件的发出语句,或者有两个侦听器,会发生什么 - 它是否必须是一对一的,即每个页面/应用程序只有一个发出和一个 on 语句?它们基本上是一个单页应用程序 - 使用 gulp 连接来制作分发文件,然后由 html 页面加载。还有一些 Angular 的东西在起作用。另一种想法 - 在代码中更改 socket.io 服务器和客户端事件时,我是否需要重新启动节点才能看到更改?
    • 抱歉回复晚了,碰撞意味着事件重复我认为这不是问题。我在github.com/ashishtiwari1993/polling_counter 使用nodejs、socket.io 实现了示例短脚本。也许这可以帮助你。
    • 好的,这一切对我来说都很有意义,我似乎没有错过任何东西。我在我的应用程序中尝试了这个 - 在与现有的工作 socket.emit('move' 等) 相同的地方 我复制了它并简单地从 socket.emit('move', ...到 socket.emit('notation'。我也复制了 socket.on 并注释掉了所有的函数调用。保存,重建 dist 文件,重新启动浏览器,重新登录,新游戏和玩 - 我 仍然 只看到移动事件触发,但不是符号事件,即使它们完全相同除了事件名称之外... WTF?
    猜你喜欢
    • 2016-05-15
    • 2017-12-26
    • 2020-07-29
    • 1970-01-01
    • 2016-10-04
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    相关资源
    最近更新 更多