【问题标题】:How to launch a multiplayer web game in PHP for all clients at the same time?如何在 PHP 中同时为所有客户端启动多人网页游戏?
【发布时间】:2016-05-31 14:05:58
【问题描述】:

我正在尝试将所有用户同时重定向到游戏页面,但我没有成功。我怎样才能同步它们?

我尝试使用 JAVASCRIPT 中的 eventSource,但仍然无法将它们全部放入游戏中。一次只重定向一个。是否有任何功能、框架或其他东西可用于同时重定向所有玩家?

<script>
if(typeof(EventSource) !== "undefined") {
var source = new EventSource("demo_sse.php");
source.onmessage = function(event) {
document.getElementById("result").innerHTML +=  " <?php startGame(); ?             >";
}
} else {
document.getElementById("result").innerHTML = "Sorry, your browser does not  support server-sent events...";
}
</script>

【问题讨论】:

  • php 在服务器上运行。假设这个 &lt;script&gt; 标记来自服务器上的 .php 页面,那么 startgame() 调用将长期消失并且永远不会到达客户端。只有该函数所做的任何输出才会显示出来。
  • 您必须为消息设置一个事件处理程序。 For example:source.addEventListener('message', function(e) { console.log(e.data); }, false);
  • 你可能要考虑研究 ajax 请求,让 ajax 请求轻松进行的事情之一是 jquery jQuery.Ajax
  • 您需要将ajaxwebsockets 与PHP 一起使用,因为PHP 是一种server-side 编程语言。
  • 您可以使用Ratchet 找到您要查找的内容。 PHP 中的 websockets 库。

标签: javascript php html multiplayer


【解决方案1】:

您的客户端 JavaScript 代码应该监听您的用户定义的“开始游戏”事件:

if (typeof(EventSource) !== "undefined") {
  var source = new EventSource("demo_sse.php");

  source.addEventListener("startgame", function(e) {
    // Start the game
    // e.g. document.location.href = '...';
  }, false);

} else {
  document.getElementById("result").innerHTML = "Sorry, your browser does not support server-sent events...";
}

你服务器的 demo_sse.php 需要回复

event: startgame\n
data: ...\n\n

备注:您需要一个能够处理长时间保持打开状态的 HTTP 连接的网络服务器(这就是 EventSource 在等待新事件时所做的事情)。如果您使用传统的 HTTP 服务器(例如 Apache),如果您不将连接到服务器的并发玩家数量限制在少数几个,那么处理您的 HTTP 请求的线程池将很快被填满。

如果您的服务器端 PHP 脚本在发送回复后关闭连接,默认情况下客户端会在超时 5 秒后重新连接。如果您的 PHP 脚本总是关闭连接,您的 EventSource 将降级为具有 5 秒刷新间隔的轮询机制。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-11-30
  • 2011-01-06
  • 2015-12-16
  • 2018-03-20
  • 1970-01-01
  • 1970-01-01
  • 2011-05-14
相关资源
最近更新 更多