我可以将从我的分机号发送到我的服务器,但我无法听到我的服务器内部的扩展名。我发现有关这个问题的答案存在矛盾:
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 :......它开始无处可寻。必须是某个地方的竞争条件。将问题理解为不再相关。
答案 0 :(得分:-1)
它突然起作用了。可能是竞争条件。