Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Web应用程序与服务器程序双向交互?_Php_Ajax_Linux_Command Line_Bidirectional - Fatal编程技术网

Php Web应用程序与服务器程序双向交互?

Php Web应用程序与服务器程序双向交互?,php,ajax,linux,command-line,bidirectional,Php,Ajax,Linux,Command Line,Bidirectional,我想编写一个web应用程序,巧妙地与引擎对弈。我对PHP和javascript并不陌生,但必须学习如何与服务器进程交互:web应用程序和/或(jQuery)ajax如何与服务器上运行的(linux)程序进行双向交互 现在我正在(Apache)本地主机上开发。Crafty安装在我的Ubuntu PC上。这个著名的国际象棋引擎没有GUI,它通过命令在终端上运行 $/usr/游戏/狡猾 所以你可以和它下棋,甚至可以看到它的计算结果: 我可以使用函数proc_open()或exec()让Crafty通

我想编写一个web应用程序,巧妙地与引擎对弈。我对PHP和javascript并不陌生,但必须学习如何与服务器进程交互:web应用程序和/或(jQuery)ajax如何与服务器上运行的(linux)程序进行双向交互

现在我正在(Apache)本地主机上开发。Crafty安装在我的Ubuntu PC上。这个著名的国际象棋引擎没有GUI,它通过命令在终端上运行

$/usr/游戏/狡猾

所以你可以和它下棋,甚至可以看到它的计算结果:

我可以使用函数proc_open()或exec()让Crafty通过PHP运行,我发现的大多数文档都说明输出流应该是一个文件。。但我想我不希望这样的设置,因为这样网页就应该不断地轮询该文件(如通过ajax),以查看是否添加了一些新数据,对吗

如何巧妙地直接与网页对话,说“我已经计算了另一个变化”或“我已经决定了一个动作”等,然后在网页上显示此信息,并让用户进行一些反击,就像在终端中一样。难道不能使用一些会话/流/侦听器吗


我一点也不知道,有人能给我指出一个正确的方向吗?

我建议您使用FIFO和
&
操作符-原因如下:

  • 您不希望在每个PHP请求上都启动crafty,您只希望在每个游戏中启动它一次
  • 你不想在你的请求结束时有狡猾的结局
  • 您的移动请求将希望与此allready运行实例交互
所以我要做的是:

  • 使用
    mkfifo
    准备一对fifo-您可以从PHP或shell中执行此操作
  • 在游戏开始时,运行类似于
    /usr/games/crafty stdout.fifo 2>stderr.fifo&
  • 对于您的移动,将AJAX PHP请求写入
    stdin.fifo
  • 对于服务器移动,使用AJAX进行长轮询,在服务器端打开
    stdin.fifo
    ,然后
    stream\u select()

听起来轮询是一种不错的选择。Crafty看起来很酷,但它不是一个服务器进程,而是一个单用户命令行应用程序。可以想象,你可以把它包装起来,为网页提供动力,但这很难——每个并发用户可能都需要一个狡猾的实例运行,这大大限制了并发用户的数量。我可以想出一些干净的解决方案,只需稍加修改。根据其网站,Crafty是一个开源程序。因此,您可以获得it()和核心业务逻辑的源代码(不考虑语言)。我们有商业逻辑。现在我们需要想办法执行这些。您可以为它构建新的UI,它可以与用户和巧妙的逻辑进行交互。这是有挑战性的,但也是可能的,而且它可以带来非常好的结果。你说呢?@Dinesh,这是可能的——但是把一个单用户应用程序变成一个多用户、无状态的web应用程序显然是不平凡的。根据我的经验,它可以轻松地消耗与构建原始单用户应用程序一样多的时间…@NevilleK-Yes。这不是一个容易开始的任务。如果没有其他办法,我们可以这样做。现在我们有很多国际象棋在线网站。不值得花那么多精力。然而,只有在情况需要时,我们才能采取这种方法。