【发布时间】:2012-11-15 01:21:47
【问题描述】:
我想编写一个 Web 应用程序来与 Crafty 引擎下棋。我对 PHP 和 javascript 并不陌生,但必须学习如何与服务器进程交互:Web 应用程序和/或 (jQuery) ajax 如何与服务器上运行的 (linux) 程序进行双向交互?
此时我正在 (Apache) 本地主机上进行开发。 Crafty 安装在我的 Ubuntu PC 上。这个著名的国际象棋引擎没有GUI,它通过命令在终端中运行
$ /usr/games/狡猾
所以你可以和它下棋,甚至可以看到它的计算:
我可以使用函数 proc_open() 或 exec() 让 Crafty 由 PHP 运行,并且我发现的大多数文档都指出输出流应该是一个文件.. 但我认为我不想要这样的设置,因为那么网页应该不断轮询该文件(例如通过 ajax)以查看是否附加了一些新数据,对吗?
Crafty 如何直接与网页对话,说“我已经计算了另一个变化”或“我已经决定采取行动”等,然后在网页上显示此信息并让用户给出一些反击,就像在终端。是不是可以使用一些会话/流/侦听器?
我一点头绪都没有,谁能指点我一个正确的方向?
【问题讨论】:
-
听起来像轮询将是要走的路。
-
Crafty 看起来很酷,但它不是服务器进程 - 它被设计为单用户命令行应用程序。可以想象,您可以将其包装起来为网页提供动力,但这会很困难 - 每个并发用户可能都需要运行一个狡猾的实例,这极大地限制了并发用户的数量。
-
我可以想出一些干净的解决方案,只需对所采用的想法进行少量修改。根据其网站craftychess.com,Crafty 是一个开源程序。因此,您可以获得它的源代码(ftp.cis.uab.edu/pub/hyatt)和核心业务逻辑(不考虑语言)。我们有业务逻辑。现在我们需要想办法执行这些。您可以为它构建新的 UI,它与用户和狡猾的逻辑交互。这是具有挑战性但可能的,它可以提供出色的结果。你说什么?
-
@Dinesh,这是可能的——但是将一个单用户应用程序变成一个多用户、无状态的 Web 应用程序显然不是微不足道的。根据我的经验,它可以很容易地消耗与构建原始单用户应用程序一样多的时间......
-
@NevilleK 是的。这不是一件容易的事。当没有其他办法时,我们可以这样做。现在我们有很多国际象棋在线网站。不值得花那么多精力。但是,只有在情况需要时,我们才能采用这种方法。
标签: php ajax linux command-line bidirectional