【问题标题】:Socket.io with koa带有 koa 的 Socket.io
【发布时间】:2014-10-06 18:49:25
【问题描述】:

我正在开发一个带有 socket.io/koa (https://github.com/koajs/koa) 服务连接的 iOS 应用程序。 为了测试我正在使用的服务 thor (https://github.com/observing/thor)。问题是,我的 socket.io 服务不会返回任何东西。当我查看 thors 的响应时,我看到存在连接,但没有来自服务的回调。 这是我构建和测试 socket.io 服务的代码:

var server = require('http').Server(app.callback()),
    io = require('socket.io')(server);

io.on('connection', function(socket) {
  socket.emit('news', { hello: 'world' });
  console.log('it works.');
});

在我看来,控制台上应该有一个日志,并且在我的客户看来应该写“{ hello:'world'}”。是koa有问题,还是我做错了什么?

【问题讨论】:

  • socket.io 的哪个版本?您的客户端代码是什么样的?我一直能够通过使用客户端 io 库并尝试连接来判断 socket.io 是否正确绑定到我的服务器实例。或者您可以查看您的服务器连接日志,socket.io 客户端库在创建客户端套接字时尝试连接您作为path: 选项提供的任何内容。您是否在 /socketio 或类似处看到任何连接尝试?

标签: node.js websocket socket.io koa


【解决方案1】:

如果您在启动应用程序的终端上看不到“它可以工作”,则说明您的服务器应用程序没有连接套接字或网络套接字。

在您的应用程序无法运行之前,我不会尝试使用 Thor 来测试 Koa。 Koa 不稳定。

查看您的代码,我假设您想要执行以下操作:

app.io.route('news', function* (next, data){
  console.log("Server terminal output for client emited event news: ",data);
  this.emit('ok',{news: 'received'});
  this.broadcast.emit('news',data);
});

注意函数后面的星号。这就是与 Express 不同的主要区别。

连接事件在客户端使用:

socket.on('connect', function () {
  socket.emit('news',{hello: 'world'});
  socket.on('ok',function(data){
    console.log('this message is written on browser console',data);
  });
})

在客户端站点上没有星号。

【讨论】:

  • Koa2 是稳定的并且使用 async/await。建议middleware改为快递
猜你喜欢
  • 1970-01-01
  • 2014-12-25
  • 2015-06-17
  • 1970-01-01
  • 1970-01-01
  • 2015-05-16
  • 2013-11-24
  • 2018-08-27
  • 2014-03-24
相关资源
最近更新 更多