我正在嘗試使用Socket.IO和Express進行瀏覽器多人遊戲,但對於我來說不太清楚爲什麼需要Express。我在我的服務器上的應用程序中,在一個名爲/遊戲的文件夾中,所以要訪問該應用程序,用戶應該鍵入http://www.example.com/game而不是http://www.example.com:3000,這是本教程的用法。我知道這是更多的Apache 2 VirtualHost配置文件的問題,但我不知道在哪裏發佈它。 這裏是我的實際.conf文件在Apache服務器上運行NodeJS
# /etc/apache2/sites-available/example.com.conf
<VirtualHost *:80>
ServerAdmin [email protected]
DocumentRoot /var/www/example.com/public_html
ServerName example.com
ServerAlias www.example.com
ProxyPreserveHost On
ProxyPass /game http://www.example.com:3000
ProxyPassReverse /game http://www.example.com:3000
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
實際上,當用戶通過該端口(http://www.example.com:3000)輸入網址進入,服務器返回像「用戶連接」,但是當我通過寫日誌鍵入URL我想(http://www.example.com/game),那麼它不會返回它讓我發瘋的任何消息...... index.js代碼:
var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);
app.get('/', function(req, res){
res.sendFile(__dirname + '/index.html');
});
io.on('connection', function(socket){
console.log('a user connected');
socket.on('disconnect', function(){
console.log('user disconnected');
});
socket.on('chat message', function(msg){
onsole.log('message: ' + msg);
});
});
http.listen(3000, function(){
console.log('listening on *:3000');
});
的index.html代碼:
<!doctype html>
<html>
<head>
<title>Socket.IO App</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="m" autocomplete="off" /><button>Send</button>
</form>
<script src="/socket.io/socket.io.js"></script>
<script src="https://code.jquery.com/jquery-1.11.1.js"></script>
<script>
$(function() {
var socket = io();
$('form').submit(function(){
socket.emit('chat message', $('#m').val());
$('#m').val('');
return false;
});
});
</script>
</body>
</html>
在此先感謝。
編輯另外,我檢查瀏覽器控制檯,同時通過example.com/game訪問,它說沒有找到socket.io.js文件,但是當進入另一種方式它確實加載文件...
希望這會有所幫助:http://www.codingtricks.biz/run-nodejs-application-apache/ –
嗨@MirzaSisic謝謝你的回答!它實際上幫了我,但我已經看到了那篇文章,它並沒有解決我的問題。現在我可以運行我的應用程序並通過example.com:3000訪問它,但我希望能夠使用example.com/game進行訪問。實際上,它們都會將我返回到正確的頁面,但是通過example.com/game輸入時,它不會加載socket.io腳本(404),並且服務器不會以「連接的用戶」的形式返回任何消息。再次感謝! – Marcos
當找不到socket.io時,使用它記錄的URL是什麼?並確認這是否正確的URL到您的套接字文件 –