繁体   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