3

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

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

$ /usr/games/狡猾

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

狡猾的终端

我可以使用函数 proc_open() 或 exec() 让 Crafty 由 PHP 运行,并且我发现的大多数文档都指出输出流应该是一个文件.. 但我想我不想要这样的设置,因为那时网页应该不断地轮询该文件(例如通过ajax)以查看是否附加了一些新数据,对吗?

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

我完全不知道,有人能指出我正确的方向吗?

4

1 回答 1

1

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

  • 您不想在每个 PHP 请求上都开始狡猾,您只想在每个游戏中启动一次
  • 你不想在你的请求结束时有狡猾的结局
  • 您的移动请求将希望与这个已经运行的实例进行交互。

所以我会做的是:

  • 使用准备一对 FIFO mkfifo- 您可以从 PHP 或从 shell 执行此操作
  • 在游戏开始时,运行类似/usr/games/crafty <stdin.fifo >stdout.fifo 2>stderr.fifo &
  • 对于您的移动,将 AJAX PHP 请求写入stdin.fifo
  • 对于服务器移动,使用 AJAX 进行长轮询,在服务器端打开stdin.fifo,然后stream_select()
于 2012-11-27T12:20:17.133 回答