2013-05-01 34 views
1

我开始玩node.js和socket.io,不知道如何制作,所以你不必在浏览器中输入“url:port”,而只需输入url。相反,我只想输入网址,然后一切都会出现,就像我未完成的单人游戏:http://space.bonsaiheld.org/(你猜对了:我想让它成为多人游戏)。游戏不能在端口80/443上运行,因为这些端口专用于Web服务器。(已解决)socket.io:如何放弃url:port scheme?

它应该是这样的:http://ondras.zarovi.cz/games/just-spaceships/而不是“ip/url:port”。怎么做?

app.js

// Socket.IO 
var app = require('http').createServer(handler) 
    , io = require('socket.io').listen(app) 
    , fs = require('fs'); 

// Start the server on port 9000 
app.listen(9000); 

// Send index.html to the player 
function handler (req, res) { 
    fs.readFile(__dirname + '/index.html', 
    function (err, data) { 
    if (err) { 
     res.writeHead(500); 
     return res.end('Error loading index.html'); 
    } 

    res.writeHead(200); 
    res.end(data); 
    }); 
} 

// Connection listener 
io.sockets.on('connection', function (client) 
{ 
    console.log('New connection established.'); 
}); // Connection listener 

的index.html

<html> 
    <head> 
    <meta charset="utf-8"> 
    <title>Mehrspielerklötzchen</title> 
    <script src="/socket.io/socket.io.js"></script> 
    </head> 
    <body> 
    <canvas id="canvas" style="background: #000000;"> 
    <script> 

    // Socket.IO 
    var socket = io.connect('http://localhost:9000'); 

    </script> 
    </body> 
    </html> 

编辑:我基本上要的是,游戏端口9000上运行,但index.html的超过正常/端口无关的网址可达像sub.domain.com/game/而不是URL:端口。

编辑2:由于我的两个问题碰巧是单独的问题,因此只将问题减少到一个。

编辑3:解决!我理解了它自己,它是完全简单:

新的极端简化的服务器代码:

var io = require('socket.io').listen(9000); 

// Connection listener 
io.sockets.on('connection', function (client) 
{ 
    console.log('Connection established.'); 
}); // Connection listener 

新的index.html(可到达的文件://folder/index.html)

<html> 
<head> 
<meta charset="utf-8"> 
<title>Mehrspielerklötzchen</title> 
<script src="http://localhost:9000/socket.io/socket.io.js"></script> 
</head> 
<body> 
<canvas id="canvas" style="background: #000000;"> 
<script> 

// Socket.IO 
var socket = io.connect('http://localhost:9000'); 

</script> 
</body> 
</html> 

感谢所有帮助过我的人。我想这也可以和端口重定向一起工作。但似乎我甚至不需要它。现在Apache一如既往地提供这些文件,但是socket.io监听端口9000和index.html(或者我想要的任何文件)连接到服务器!这也意味着这个文件现在可以躺在任何地方,甚至在另一个服务器或本地。完善。 :))

+0

但是现在你的解决方案*包含一个明确的端口,我以为这就是你不想要的? – Bergi 2013-05-01 12:16:28

回答

1

使用默认的HTTP/HTTPS端口80/443(也是WS/WSS的默认端口)。

当然你可以将它们redirect转换为其他“内部”端口。

+0

那么如何有多个游戏呢?除此之外,我使用共享主机。我的端口是9000.我的链接“Just Spaceships!” - 游戏使用Port 1500,你不必在浏览器中键入:1500 ...这就是我也想要的。 – user2337969 2013-05-01 01:29:05

+0

与港口相关的游戏数量如何?如果你只在端口上,你需要输入9000 ...... – Bergi 2013-05-01 01:33:24

+0

当然,我可以有多个端口。 9000只是我的第一个。但为什么没有那个太空游戏的制造者必须这样做呢?访问这里:http://ondras.zarovi.cz/games/just-spaceships/ - 那里的wss://服务器地址是“服务器URL”字段的右边。所以游戏在1500端口上运行,但你不必输入,所以你可以改变它来连接到不同的服务器。 – user2337969 2013-05-01 01:35:32

相关问题