html5可以做单机游戏吗,HTML5中的实时多人游戏:只有单机

我很难让多人游戏成为多电脑游戏,而不仅仅是多浏览器选项卡。我通过HTML5教程中的实时多人游戏(Build New Games,点击here)。它侦听端口4004,但是我无法通过访问192.168.1.4:4004从我的局域网的其他计算机进行连接,即使我可以通过访问192.168.1.4与我的Apache Web服务器在端口80上连接(自从禁用Apache并在我的路由器上转发端口80,而不是转发端口4004)。我曾经通过访问my-domain.com(它的DNS由我的ISP托管)从外部世界连接到Apache。现在我无法通过访问my-domain.com或my-domain.com:4004从我的局域网外部连接到我的教程。本教程使用node.js,socket.io和express。通过在终端中输入node app.js来启动它。您通过访问127.0.0.1:4004或192.168.1.4:4004添加新玩家。这里是app.js的内容:HTML5中的实时多人游戏:只有单机

var

gameport = process.env.PORT || 4004,

express = require('express'),

UUID = require('node-uuid'),

verbose = false,

app = express()

, http = require('http')

, server = http.createServer(app)

, io = require('socket.io').listen(server);

/* Express server set up. */

//The express server handles passing our content to the browser,

//As well as routing users where they need to go. This example is bare bones

//and will serve any file the user requests from the root of your web server (where you launch the script from)

//so keep this in mind - this is not a production script but a development teaching tool.

//Tell the server to listen for incoming connections

server.listen(gameport);

//Log something so we know that it succeeded.

console.log('\t :: Express :: Listening on port ' + gameport);

//By default, we forward the/path to index.html automatically.

app.get('/', function(req, res){

res.sendfile(__dirname + '/index.html');

});

//This handler will listen for requests on /*, any file from the root of our server.

//See expressjs documentation for more info on routing.

app.get('/*' , function(req, res, next) {

//This is the current file they have requested

var file = req.params[0];

//For debugging, we can track what files are requested.

if(verbose) console.log('\t :: Express :: file requested : ' + file);

//Send the requesting client the file.

res.sendfile(__dirname + '/' + file);

});

/* Socket.IO server set up. */

//Express and socket.io can work together to serve the socket.io client files for you.

//This way, when the client requests '/socket.io/' files, socket.io determines what the client needs.

//Create a socket.io instance using our express server

var sio = io;

//Configure the socket.io connection settings.

//See http://socket.io/

sio.configure(function(){

sio.set('log level', 0);

sio.set('authorization', function (handshakeData, callback) {

callback(null, true); // error first callback style

});

});

//Enter the game server code. The game server handles

//client connections looking for a game, creating games,

//leaving games, joining games and ending games when they leave.

game_server = require('./game.server.js');

//Socket.io will call this function when a client connects,

//So we can send that client looking for a game to play,

//as well as give that client a unique ID to use so we can

//maintain the list if players.

sio.sockets.on('connection', function (client) {

//Generate a new UUID, looks something like

//5b2ca132-64bd-4513-99da-90e838ca47d1

//and store this on their socket/connection

client.userid = UUID();

//tell the player they connected, giving them their id

client.emit('onconnected', { id: client.userid });

//now we can find them a game to play with someone.

//if no game exists with someone waiting, they create one and wait.

game_server.findGame(client);

//Useful to know when someone connects

console.log('\t socket.io:: player ' + client.userid + ' connected');

//Now we want to handle some of the messages that clients will send.

//They send messages here, and we send them to the game_server to handle.

client.on('message', function(m) {

game_server.onMessage(client, m);

}); //client.on message

//When this client disconnects, we want to tell the game server

//about that as well, so it can remove them from the game they are

//in, and make sure the other player knows that they left and so on.

client.on('disconnect', function() {

//Useful to know when soomeone disconnects

console.log('\t socket.io:: client disconnected ' + client.userid + ' ' + client.game_id);

//If the client was in a game, set by game_server.findGame,

//we can tell the game server to update that game state.

if(client.game && client.game.id) {

//player leaving a game should destroy that game

game_server.endGame(client.game.id, client.userid);

} //client.game_id

}); //client.on disconnect

}); //sio.sockets.on connection

我意识到,端口转发和路由器的问题可能是最多人游戏教程的范围之内。尽管如此,我希望有人能帮助我。谢谢。

2013-05-27

Quadra

+0

你没有提到你的操作系统,但你检查了服务器的防火墙设置?我知道你在玩你的路由器的设置,但那将是能够从外部访问你的网络...... –

+0

感谢@Martin的提示。我有Ubuntu 12.04 LTS,所以我只需输入'sudo ufw allow 4004',现在就可以工作了。这个stackoverflow程序员论坛对于像我这样的新手来说真的是非常宝贵的资源。 –

+0

将发布为官方答案,然后... :) –

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值