2012-06-20 66 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