2012-06-20 50 views
0

我们试图将drupal与node.js集成几天。但我们无法连接到socket.io.js ..drupal - node.js集成

我们从chrome控制台收到此错误消息;

XMLHttpRequest无法加载http://mydomainname.com:8080/socket.io/1/?t=1340201859161。 Access-Control-Allow-Origin不允许原产地http://mydomainname.com

和我们的后端设置是;

/** 
* This configuration file was built using the 'Node.js server configuration builder'. 
* For a more fully commented example see the file nodejs.config.js.example in the root of this module 
*/ 
backendSettings = { 
    "scheme":"http", 
    "host":"mydomainname", 
    "port":8080, 
    "key":"/path/to/key/file", 
    "cert":"/path/to/cert/file", 
    "resource":"/sites/all/modules/nodejs/node_modules/socket.io/lib", 
    "publishUrl":"publish", 
    "serviceKey":"", 
    "backend":{ 
    "port":80, 
    "host":"urb5.com", 
    "messagePath":"realtime"}, 
    "clientsCanWriteToChannels":false, 
    "clientsCanWriteToClients":false, 
    "extensions":["nodejs.server.extension.js"], 
    "debug":true, 
    "transports":["websocket", 
    "flashsocket", 
    "htmlfile", 
    "xhr-polling", 
    "jsonp-polling"], 
    "jsMinification":true, 
    "jsEtag":true, 
    "logLevel":1}; 

而且,在源代码中,我们有一个脚本socket.io脚本, 像

<script type="text/javascript" src="http://mydomainname.com:8080/sites/all/modules/nodejs/node_modules/socket.io/lib/socket.io.js"></script> 

此脚本版本号为0.9.6,但如果我们按照这个路径在FTP中,是socket.io.js但它的版本号是0.9.5

什么建议? 感谢..

+0

我认为这是一个重复的:http://stackoverflow.com/questions/6818029/node-js-socket-io-simple-chat –

回答

0

这里的问题是,你要加载从服务器上启动socket.io,但是您的前端文件位于另一个域空间/服务器中。
有安全法规,如果它们不被服务器启用,则不允许跨域ajax和资源请求。因此,在服务器一侧socket.io.js是来自
,你应该添加在页面标题是这样的:

Access-Control-Allow-Origin: http://hello-world.example 
Access-Control-Max-Age: 3628800 
Access-Control-Allow-Methods: PUT, DELETE 

这将让你分享与指定域的资源内容。并且浏览器不会再抛出访问控制 - 允许 - 来源错误。
以及为什么你试图通过端口8080包括js文件?如果这是绑定你的socket.io监听器的端口,那么这是错误的,并且你需要通过通常的端口获取js文件(大多数情况下没有定义,或者80)。

+0

这也适用于端口不同时,例如在这种情况下一个端口是80,另一个是8080. – kiamlaluno

+0

感谢我们的回答, 我们在Ubuntu上使用drupal7,并且不知道哪个文件应该添加这些代码。这些前端代码由drupals nodejs模块生成。 它也没有在端口80工作,服务器解雇; “警告 - 错误提出:错误:侦听EADDRINUSE”,在8080上没有任何服务器错误。 –

+0

当nodejs尝试在已使用的端口上运行侦听套接字时,会触发此错误。 – moka