【发布时间】:2015-06-28 00:19:36
【问题描述】:
我能够从我的扩展程序到我的服务器发送 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;
}
注入.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'});
}
});
这是我连接的基本设置。当我在非扩展模式下启动应用程序时(我们正在制作一个扩展程序来模拟我们的 web 应用程序),这个系统可以完美运行,但是在扩展程序中,room:update 永远不会被触发。
编辑 2:
我们对socket.js 中的socket 对象(在连接时生成)执行了console.log。在标头中,主机似乎是dev.mydomain.com,而引荐来源是www.othersite.com。这可能是问题吗? “宿主”指的是什么?套接字服务器的主机,还是套接字侦听器的主机?在后一种情况下,它没有达到我们运行扩展程序的www.othersite.com 是有道理的。
EDIT 3:……它不知从何而来。一定是某处的比赛条件。关闭不再相关的问题。
【问题讨论】:
-
您能发布任何详细说明此问题的代码吗?客户端可能不正确
标签: javascript node.js sockets google-chrome-extension socket.io