PHP与Java服务器的接口

时间:2012-03-17 13:46:27

标签: java php

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

如何将Java与PHP连接?我想到了一些事情,这些都有用吗?

  • 运行附加服务(例如HTTP服务器)以进行远程控制(在另一个端口上)的Java游戏服务器
  • PHP和Java通信。数据库 - 例如Java检查表以执行命令
  • Java和PHP都连接到与两者接口的附加服务
    • Java连接(套接字等)到服务器
    • PHP连接到服务器
    • 服务器以任何方式处理流量

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

4 个答案:

答案 0 :(得分:4)

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

首先,我假设您的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扩展。这里有一个很好的讨论如何做到这一点:How to send a GET request from PHP? BTW,上面提到的Java Bridge使用这种方法。

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

答案 1 :(得分:2)

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

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

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

有关您的设置的更多详细信息可能会有所帮助,但这是我如何解决问题的一般概念。

答案 2 :(得分:2)

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

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

  • 在PHP中 - 将命令存储到DB。在Java应用程序中,如果DB
  • 中有一些命令,则执行循环检查(或使用计时器或...)
  • 基于SOAP创建非常简单的界面(AFAIK也有Java中的SOAP库),并通过此界面发布命令。 (但只为命令进行SOAP通信,任何列表或对DB的更改都可以通过DB服务器更简单,更快速地完成)

答案 3 :(得分:1)

PHP Java Bridges:

In Zend

PHP Java Bridge