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

时间:2012-11-27 12:07:48

标签: php ajax linux command-line bidirectional

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

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

在终端中运行
  

$ / usr / games / crafty

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

crafty in terminal

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

Crafty如何直接与网页对话,说“我已经计算了另一个变体”或“我已经决定了一个动作”等,然后在网页上显示此信息并让用户进行一些反击,就像在终端。是不是可以使用一些会话/流/监听器?

我根本没有任何线索,任何人都能指出我正确的方向吗?

1 个答案:

答案 0 :(得分:1)

我建议您使用fifos和&运算符 - 这就是原因:

  • 你不想在每个PHP请求上开始狡猾,你想每场比赛只启动一次
  • 您不希望在请求结束时狡猾地结束
  • 您的移动请求将希望与此正在运行的实例进行交互。

所以我会做的是:

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