我有一个简单的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一般都很新。
答案 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
,它应该可以工作。