Javascript 如何配置node.js使其在实际web服务器上正常工作
我有一个简单的node.js/socket.io聊天程序,它几乎完全基于。当我使用Javascript 如何配置node.js使其在实际web服务器上正常工作,javascript,node.js,sockets,web,socket.io,Javascript,Node.js,Sockets,Web,Socket.io,我有一个简单的node.js/socket.io聊天程序,它几乎完全基于。当我使用localhost:3000连接到本地机器时,它在本地机器上工作正常。然后我尝试将它放到我的Web服务器上,这样任何人都可以访问mydomain.com/experiments/thing.html,并访问相同的程序。我一辈子都不能让它正常工作。HTML加载得很好,但是在控制台中我看到了很多与socket.io相关的404错误。我花了很长时间试图寻找解决方案,但除了localhost之外,我找不到任何教程提到如何设
localhost:3000
连接到本地机器时,它在本地机器上工作正常。然后我尝试将它放到我的Web服务器上,这样任何人都可以访问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>
事情
*{边距:0;填充:0;框大小:边框框;}
正文{字体:13px Helvetica,Arial;}
表单{background:#000;填充:3px;位置:固定;底部:0;宽度:100%;}
表单输入{边框:0;填充:10px;宽度:90%;右边距:5%;}
窗体按钮{宽度:9%;背景:rgb(130224255);边框:无;填充:10px;}
#消息{列表样式类型:无;边距:0;填充:0;}
#消息li{padding:5px 10px;}
#留言李:第n个孩子(奇数){背景:#eee;}
发送
var socket=io();
$('form')。提交(函数(){
emit('command',$('#commandLine').val();
$('#命令行').val('');
返回false;
});
非常感谢您的帮助,我感到很失落,因为我真的不知道我在这里做什么。一般来说,我对node.js非常陌生。首先,我只想确保您知道必须能够在服务器上运行nodejs。也就是说,您必须在服务器上安装节点并在那里运行聊天服务器 然后,您可以让节点直接在端口80(即HTTP端口)上服务,或者让另一个web服务器在前面代理到您的节点服务器。第二种方式更常见,通常人们选择在前面使用nginx 对于nginx,您将有如下配置指令:
location /experiments {
proxy_pass http://localhost:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
这使得所有对/experiments
(或以该路径开头的任何路径)的请求都转到节点服务器
在nginx和node运行的情况下,您可以将浏览器指向
mydomain.com/experiments
,它应该可以工作。首先,我只想确保您知道必须能够在服务器上运行nodejs。也就是说,您必须在服务器上安装节点并在那里运行聊天服务器
然后,您可以让节点直接在端口80(即HTTP端口)上服务,或者让另一个web服务器在前面代理到您的节点服务器。第二种方式更常见,通常人们选择在前面使用nginx
对于nginx,您将有如下配置指令:
location /experiments {
proxy_pass http://localhost:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
这使得所有对/experiments
(或以该路径开头的任何路径)的请求都转到节点服务器
有了这个功能,nginx和node运行后,您可以将浏览器指向mydomain.com/experiments
,它应该可以正常工作