![](/img/trans.png)
[英]How would I use Socket.io on a dedicated node.js server on a php site?
[英]Trying to Implement Node.js and Socket.io on dedicated server
最近,我一直在嘗試使用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');
至
Uncaught ReferenceError: io is not defined mydomain.com/:3
GET http://mydomain.com/socket.io/socket.io.js mydomain.com/:1
,但這會使瀏覽器拋出以下錯誤:
Uncaught ReferenceError: io is not defined mydomain.com/:3 GET http://mydomain.com/socket.io/socket.io.js mydomain.com/:1
即使在我的主服務器計算機上。 我在Mac mini btw上使用OSX服務器。
任何意見,將不勝感激:
看起來您正在偵聽端口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文件。
如果加載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對您的瀏覽器可用。
好。 嘗試運行以下代碼:
檔名: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);
});
});
文件名:index.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。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.