2012-08-03 147 views
0

我設法設置了一個node.js服務器,並通過本地計算機訪問它(通過localhost)。但是,我無法從LAN上的任何其他計算機訪問它。設置node.js服務器

服務器是192.168.1.103,客戶端是192.168.105

我使用Apache Web服務器,和node.js中爲8080

似乎在端口聊天服務器就像每次我重新啓動服務器時,我都會得到一個不同的錯誤。有時候,我可以從遠程計算機訪問192.168.1.103:8080/socket.ion/socket.io.js,有時它崩潰的服務器與eror,或者:

/home/tnewhook/node_modules/socket.io/lib/manager.js:0 
(function (exports, require, module, __filename, __dirname) { /*! 
^ 
RangeError: Maximum call stack size exceeded 

OR

/home/tnewhook/node_modules/socket.io/lib/manager.js:916 
match = req.url.substr(0, resource.length); 

到目前爲止我見過的最奇怪的錯誤是

missing resource (GET http://192.168.1.105:8080/socket.io. error in socket.io.js:1632 

爲什麼socket.io會試圖自我調用?

+0

'客戶端是192.168.105'這是什麼意思?檢查這[鏈接](http://en.wikipedia.org/wiki/IPv4) – 2013-03-19 07:02:28

回答

0

如果我沒有錯誤地在客戶端socket io js中有一個硬編碼的ip,這就解釋了爲什麼這不能在兩臺計算機之間工作。

要解決此問題,請在服務提供商上載您的應用,例如dotcloud.com或nodejitsu(僅限有限的beta版本),這是唯一支持websocket的應用。

或者你也可以例如在兩個MACHIN EDIC /etc/hosts 並在serveur

myApp.local 127.0.0.1 

和客戶

myApp.local 192.168.1.103 

上添加例如,對於我使用本地是一個procedent項目DNS或dotcloud分享給全世界。

var url = 'http://myapp:8080'; 
url = 'http://myapp-me.dotcloud.com'; 
var socket = io.connect(url); 
+0

我的服務器和他們的有什麼區別。客戶端上的錯誤IP是不是仍然會被硬編碼? – 2012-08-03 05:01:46

+0

您需要有一個唯一的DNS來指向您的所有客戶。要做到這一點,你可以將服務器放在網絡上,並將公共DNS放在客戶端連接字符串上,或者使用/ etc/host僞造所有客戶端上的DNS。 – 3on 2012-08-03 05:08:05

+0

您確實需要編輯客戶端js。 – 3on 2012-08-03 05:13:01