PHP与Java服务器的接口


Interfacing PHP with Java server

我有一个游戏服务器应用程序(Java),希望让PHP直接与它通信。例如,发送一个返回用户列表的命令(来自PHP)。从游戏服务器等踢出特定玩家。

如何将Java与PHP接口?我想了几件事,这些可行吗?

  • Java游戏服务器,运行用于远程控制的附加服务(例如HTTP服务器)(在另一个端口上)
  • PHP和Java通过进行通信。数据库-例如Java检查表中的待办命令
  • Java和PHP都连接到一个额外的服务,该服务将两者连接起来
    • Java连接(套接字等)到服务器
    • PHP连接到服务器
    • 服务器以任何一种方式处理流量

哪种方法最好?我将如何实施该方法?

我不清楚你试图解决的问题的确切条件。但让我建议几个场景,希望至少有一个能解决你的问题。

首先,我假设您的java代码和php代码都位于web服务器上,这意味着它们可以使用标准http协议执行。在php中,这只是意味着您有一个.php网页,可以使用标准的$_REQUEST对象和标准的输出方法(如header和echo)。类似地,在java中,这意味着您的代码驻留在servlet或jsp中,并使用标准的请求和响应对象。

我将在下面讨论在java和php之间共享全局数据的方法,但现在我们不用担心。让我们讨论3种可能的通信场景:

1) 您的游戏在浏览器(或另一个使用http与web服务器通信的程序)中运行,并希望分别调用java和php。在这种情况下,您的游戏代码只需调用适当的url,使用标准的GET或POST方法来传递参数,并处理代码返回的响应文本。然而,我怀疑这种情况并不能回答你的问题。

2) 如果你想让java调用php,那么你可以使用java.net类(比如URL)来调用php页面。java教程对如何做到这一点有很好的解释:http://docs.oracle.com/javase/tutorial/networking/urls/index.html

3) 类似地,如果你想让php调用java,有几种可能性。最通用的是CURL php扩展。关于如何做到这一点,这里有一个很好的讨论:如何从PHP发送GET请求?顺便说一句,上面提到的Java Bridge使用了这种方法。

好的,那么现在我们如何在java和php之间共享数据呢?如果不需要在代码之间共享全局数据,那么,如上所述,您可以使用http传递请求参数并发送回文本输出响应(使用json、xml或其他任何您喜欢的方式)。然而,如果有全球数据需要共享,那就有点复杂了。您需要使用服务器文件系统来共享数据,因为java和php之间没有内存共享(至少据我所知)。由于java和php都可以读写文件,所以编写代码没有问题。然而,存在并发性问题。如果几段代码可以同时访问和修改全局数据,那么你就必须担心这一点,因为否则数据更改可能会丢失或数据损坏。因此,如上所述,最简单的解决方案是使用数据库,因为数据库软件会为您处理并发性。否则,您必须拥有某种文件锁定机制,这是可行的,但可能不值得付出这些努力。

最简单的解决方案是通过MySQL数据库连接PHP和Java。他们两个都支持。

如果你需要发送命令,有两种方法

  • 在PHP中,将命令存储到数据库中。在Java应用程序中,如果DB中有一些命令,请在循环中进行检查(或使用计时器或…)
  • 基于SOAP制作非常简单的接口(AFAIK Java中也有SOAP库),并通过该接口发布命令。(但是,只为命令进行SOAP通信,任何列表或对DB的更改都可以通过DB服务器变得更简单、更快)

您的Java服务器是如何通信的?TCP套接字?无论通信方法是什么,我都建议您的PHP应用程序使用其首选的通信方法直接与Java服务器接口。

如果服务器确实通过TCP进行通信,那么肯定有通过PHP使用TCP的TCP库和教程,例如http://www.devshed.com/c/a/PHP/Socket-Programming-With-PHP/

我建议您不要使用其他解决方案(尽管它们并不坏),因为它们增加了您需要维护的不必要的复杂性。例如,您的第一个选项(HTTP中介)是我最喜欢的想法,它将导致您在HTTP服务器内编写相同的TCP(?)接口代码,而您可以只在PHP代码中编写它,然后完全跳过HTTP服务器项目。

关于你的设置的更多细节可能会有所帮助,但这是我如何处理这个问题的大致想法。