在线游戏如何将玩家联系在一起?

时间:2012-10-09 07:33:10

标签: php sockets multiplayer

我一直在制作基于在线的connect4游戏,在大多数情况下,它可以完美运行。

唯一的问题是,当进行移动时,游戏会调用PHP脚本,该脚本将用于会话的数据写入公开可见的文本文件,然后由其他玩家(使用jQuery)读取,并且其计算机更新并相应地进行渲染。

然而,我觉得这是实现这一目标的一种非常糟糕的方式。我已经考虑过使用套接字,但由于计算机上没有监听传入数据包的守护进程,并且端口没有在播放器计算机上转发,我不知道如何使用套接字实现这种效果。

2 个答案:

答案 0 :(得分:1)

通常你使用PHP而不是文件的mySQL数据库。 它允许你像这样编写游戏状态,更好的是使用像PDO这样的数据库层:

$gamestate_serialized= mysql_real_escape_string(serialize($gamestate_array));
$gameID= intval($gameID);
$query= "insert into gamestate (gameID, state) values ($gameID,'$gamestate_serialized')";
$handle= mysql_query($query);
if(!$handle) print mysql_error();

并按如下方式阅读:

$gameID= intval($gameID);
$query= "select state from gamestate where gameID=$gameID"; 
$handle= mysql_query($query);
if(!$handle) print mysql_error();
$row = mysql_fetch_assoc($handle);
$state_array= unserialize($row['state']);

答案 1 :(得分:1)

很少有在线游戏直接连接玩家。在几乎所有在线游戏中,所有数据交换都通过中央服务器进行。这对防止作弊很重要。只要中立服务器管理游戏状态,任何客户都无法操纵它。

为了节省带宽,通过每次移动来阅读整个游戏状态并不是一个好方法。当客户只被告知其他玩家所做的一次移动时会更好,因为所有其他信息都是多余的。

Javascript Websockets是将更新推送到其他玩家的最佳选择。不幸的是,并非所有浏览器都支持它(Internet Explorer不太可能在Windows 7之前的任何操作系统上支持它)。一个较低但更广泛支持的选择是AJAX。