在 chrome 扩展中侦听 socket.io 连接

Listen for socket.io connection inside chrome extension

我可以发送 socket.io 连接 我的分机 我的服务器,但我听不到来自我的扩展中的服务器。关于这个问题,我发现了相互矛盾的答案:

Opening a Socket.IO connection in a google chrome extension说这做不到;和

Cross-domain connection in Socket.IO 说可以。

是否有任何我必须更改的特殊配置才能接受来自我的套接字服务器的发射?

编辑:

(注:我用的是AngularJS,但应该与本题无关)

socketFactory.js:

myApp.factory('socketFactory', function($rootScope) {
  var socket = io.connect('//dev.mydomain.com', {'path': '/api/socket'});
  return socket;
}

inject.js:

var packetData = { 'some':'data', 'roomId':'123abc' };
socketFactory.emit('room:join', packetData);
...
socketFactory.on('room:update', function (data) {
  console.log('Received data from socket server');
  console.log(data)
}

socket.js (server-side):

socket.on('room:join', function ( data ) {
  // Setting socketId to detect disconnect
  data.user.socketId = socket.id;

  socket.join( data.roomId, function() {
    // Some code ...
    io.sockets.to(data.roomId).emit('room:update', {'some':'data', 'roomId': '123abc'});
  }
});

这是我连接的基本设置。当我在 non-extension 模式下启动应用程序时(我们正在扩展以模拟我们的 webapp),这个系统完美运行,但是在扩展中,room:update 永远不会被触发。

编辑 2:

我们在 socket.js 中对 socket object(在连接时生成)做了一个 console.log。在 headers 中,主机似乎是 dev.mydomain.com,而引用者是 www.othersite.com。这可能是问题所在吗? "host" 指的是什么?套接字服务器的主机,或套接字侦听器的主机?在后一种情况下,它没有达到 www.othersite.com 是有道理的,我们有扩展名 运行.

编辑 3:...它开始无处不在。一定是某处的竞争条件。关闭不再相关的问题。

突然好用了。可能是竞争条件。