簡體   English   中英

嘗試在專用服務器上實現Node.js和Socket.io

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM