2013-08-19 396 views
0

最近,我一直在試驗Node.js和Socket.io。成功地,我已經能夠實現這些,但只能在本地主機上實現。現在我想在我的專用服務器上使用此功能。我從我自己的家中託管我的服務器,我無法讓節點和套接字在本地主機之外運行。這樣做的重要性是,我可以在測試我的網站時使用兩臺不同的計算機。這裏是我的代碼如下:試圖在專用服務器上實現Node.js和Socket.io

app.js: 

    var app = require('express')() 
    , server = require('http').createServer(app) 
    , io = require('socket.io').listen(server); 

server.listen(80); 

app.get('/', function (req, res) { 
    res.sendfile(__dirname + '/index.html'); 
}); 

io.sockets.on('connection', function (socket) { 
    socket.emit('news', { hello: 'world' }); 
    socket.on('my other event', function (data) { 
    console.log(data); 
    }); 
}); 

index.html: 

    <script src="http://localhost:8080/socket.io/socket.io.js"></script> 
    <script> 
     var socket = io.connect('http://localhost:8080'); 
     socket.on('news', function (data) { 
     console.log(data); 
     socket.emit('my other event', { my: 'data' }); 
     }); 

</script> 

這些是直接帶下socket.io網站樣本。現在它在localhost上工作,但不在外部。我無法在另一臺電腦上使用它。有人建議我改變

var socket = io.connect('http://localhost:8080');
var socket = io.connect('http://mydomain.com:8080');
,但使得瀏覽器會引發以下錯誤:

Uncaught ReferenceError: io is not defined mydomain.com/:3 
    GET http://mydomain.com/socket.io/socket.io.js mydomain.com/:1 

即使我的主服務器計算機上。我使用OS X服務器與Mac mini btw。

任何意見,將不勝感激:

回答

0

它看起來像你在80端口監聽的8080,而是和你需要你的腳本塊指向您的服務器,所以儘量

<script src="http://localhost:8080/socket.io/socket.io.js"></script> 

必須

<script src="http://mydomain.com:80/socket.io/socket.io.js"></script> 

或更好,但

<script src="/socket.io/socket.io.js"></script> 

如果這不起作用,請確保您檢查調試器窗口的網絡選項卡下的任何錯誤(假定您使用的是chrome)以確保您正確加載該socket.io.js文件。

0

你並不需要指定服務器地址,如果它是在JS加載相同:

<script src="/socket.io/socket.io.js"></script> 
<script> 
    var socket = io.connect(); 
    socket.on('news', function (data) { 
    console.log(data); 
    socket.emit('my other event', { my: 'data' }); 
    }); 
</script> 

,但您需要爲您提供瀏覽器http://mydomain.com/socket.io/socket.io.js

+0

做了你的建議,現在我得到這個錯誤: 「GET http:// mydoma in.com/socket.io/1/?t=1376958569564 404(Not Found)「 實質上,我的根文件夾包含解決最初問題的/socket.io/socket.io.js。 –

0

好的。嘗試運行這段代碼:

文件名:的package.json

{ 
"name": "test-socketio" 
, "version": "0.0.1" 
, "private": true 
, "dependencies": { 
    "socket.io": "*" 
}, 
"engines": { 
    "node": "0.8.x" 
    ,"npm" : "*" 
} 

}

文件名:app.js

var express = require('express') 
, app = express() 
, server = require('http').createServer(app) 
, io = require('socket.io').listen(server); 

server.listen(80); 

app.get('/', function (req, res) { 
    res.sendfile(__dirname + '/index.html'); 
}); 

io.sockets.on('connection', function (socket) { 
    socket.emit('news', { hello: 'world' }); 
    socket.on('my other event', function (data) { 
    console.log("Recevied: 'my other event'"); 
    console.log(data); 
    }); 
}); 

文件名:指數。HTML

<script src="/socket.io/socket.io.js"></script> 
<script> 
var socket = io.connect(); 
    socket.on('news', function (data) { 
     console.log("Received news event"); 
     console.log(data); 
     socket.emit('my other event', { my: 'data' }); 
    }); 
</script> 

然後在代碼目錄下運行:

npm install 

並運行:

sudo node app.js 

請記住,你需要有root用戶權限啓動偵聽端口80。

+0

啊,根權。我不知道。謝謝。 –

+0

我試着與你的規格再次嘗試它,我收到在終端執行以下操作: '信息 - socket.io開始 警告 - 錯誤提出:錯誤:聽EADDRINUSE' –

+0

別的東西已經偵聽端口80。必須先關閉該服務。 – Luman75

相關問題