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

时间:2015-04-21 02:52:26

标签: javascript node.js sockets google-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(服务器端):

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'});
  }
});

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

编辑2

我们在console.log中的socket对象(在连接时生成)上执行了socket.js。在标题内,主机显示为dev.mydomain.com,而引荐来源为www.othersite.com。这可能是问题吗? “主持人”指的是什么?套接字服务器的主机,或套接字监听器的主机?在后一种情况下,有意义的是它没有达到www.othersite.com我们的扩展运行。

编辑3 :......它开始无处可寻。必须是某个地方的竞争条件。将问题理解为不再相关。

1 个答案:

答案 0 :(得分:-1)

它突然起作用了。可能是竞争条件。