如何配置node.js以使其在实际的Web服务器上正常工作

时间:2015-12-09 01:03:09

标签: javascript node.js sockets web socket.io

我有一个简单的node.js / socket.io聊天程序,几乎完全基于this tutorial。当我使用localhost:3000连接到它时,它在我的本地计算机上完美运行。然后我尝试将它放在我的网络服务器上,这样任何人都可以转到mydomain.com/experiments/thing.html并访问同一个程序。我不能为我的生活让这个正常工作。 HTML加载正常,但在控制台中我看到很多与socket.io有关的404错误。我尝试了很长时间来搜索解决方案,但我找不到任何提及如何在localhost之外设置类似内容的教程。

所以,我想要帮助的是设置此代码,以便在用户转到mydomain.com/experiments/whatever.html时,此代码就像我在当前状态下导航到localhost:3000一样。

这是我的代码:

服务器:

var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);

http.listen(3000, function(){
  console.log('listening on *:3000');
});

app.get('/', function(req, res){
  res.sendFile('other.html', { root : __dirname});
});

io.on('connection', function(socket){
  console.log("new connection, user " + socket.id);
  socket.on('disconnect', function(){
    console.log("user " + socket.id + " disconnected.");
  });
});

客户端:

<!doctype html>
<html>
  <head>
    <title>Thing</title>
    <style>
      * { margin: 0; padding: 0; box-sizing: border-box; }
      body { font: 13px Helvetica, Arial; }
      form { background: #000; padding: 3px; position: fixed; bottom: 0; width: 100%; }
      form input { border: 0; padding: 10px; width: 90%; margin-right: .5%; }
      form button { width: 9%; background: rgb(130, 224, 255); border: none; padding: 10px; }
      #messages { list-style-type: none; margin: 0; padding: 0; }
      #messages li { padding: 5px 10px; }
      #messages li:nth-child(odd) { background: #eee; }
    </style>
  </head>
  <body>
    <ul id="messages"></ul>
    <form action="">
      <input id="commandLine" autocomplete="off" /><button>Send</button>
    </form>
    <script src="https://cdn.socket.io/socket.io-1.2.0.js"></script>
    <script src="http://code.jquery.com/jquery-1.11.1.js"></script>
    <script>
      var socket = io();
      $('form').submit(function(){
        socket.emit('command', $('#commandLine').val());
        $('#commandLine').val('');
        return false;
      });
    </script>
  </body>
</html>

非常感谢帮助,我感到非常失落,因为我老实说不知道我在这里做什么。我对node.js一般都很新。

1 个答案:

答案 0 :(得分:0)

首先,我只是想确保您知道必须能够在服务器上运行nodejs。也就是说,您必须在服务器上安装节点并在那里运行聊天服务器。

然后,您可以在端口80上使用节点服务,即直接使用HTTP端口,或者在前面安装另一个Web服务器,代理节点服务器。第二种方式更常见,通常人们选择在前面使用nginx。

对于nginx,您将拥有如下配置指令:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.0/jquery.min.js"></script>
<div>
  <span id="text">Hello world</span>
</div>
<p>
  <button id="next-btn">Next</button>
</p>

这使得location /experiments { proxy_pass http://localhost:3000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } 的所有请求(或以此开头的任何路径)都会转到您的节点服务器。

有了这个,nginx和节点运行,你就可以将你的浏览器指向/experiments,它应该可以工作。