将PHP代码连接到Java后端
我正在实现一个网站,前端使用PHP,后端使用Java服务。这两部分内容如下:将PHP代码连接到Java后端,java,php,service,native,daemon,Java,Php,Service,Native,Daemon,我正在实现一个网站,前端使用PHP,后端使用Java服务。这两部分内容如下: PHP前端侦听http请求并与数据库交互 Java后端持续运行并响应前端的调用 更具体地说,后端是一个守护进程,用于连接和维护到多个IM服务(AOL、MSN、Yahoo、Jabber…)的链接 这两个层将部署在同一个系统上(我想是CentOS机箱),引入中间层(例如:使用XML-RPC)将降低性能(资源也相当有限) 问:有没有办法将这两层直接连接起来?(中间不再有web服务)您可以尝试 此外,如果通信是单向的(类似于“
此外,如果通信是单向的(类似于“sendmail for IM”),您可以将PHP请求写入一个文件,并在Java应用程序中监视该文件。由于这是两个单独运行的进程之间的通信,因此不可能进行“直接”调用(如中所述)。进行这种进程间通信的最简单的方法可能是和网络套接字。在这两种情况下,您都必须定义一个通信协议并在双方实现它。使用标准协议(如XML-RPC)可以简化这一过程,但这并不是绝对必要的。我看到了这个页面,它介绍了链接两个层的方法。但是,它仍然需要一个中间层(TCP/IP)。此外,其他服务也可能利用Java服务,因为它接受所有传入的连接
[正在研究…]我尝试了PHP Java桥(PHP Java bridge.sourceforge.net/pjb/),效果非常好。基本上,我们需要运行一个jar文件(JavaBridge.jar),它监听端口(有几个选项可用,比如本地套接字、8080端口等等)。java类文件必须可用于类路径中的JavaBridge。您需要在php中包含一个文件Java.inc,然后才能访问Java类。当然,有很多方法,但是您提到了有限的资源 IMHO定义自己的轻量级RPC协议,并使用TCP/IP上的套接字进行通信。实际上,在这种情况下,没有必要充分利用RPC等的优点。。。您只需要为这种特殊情况定义API并在两侧实现它。在这种情况下,您可以将数据包序列化为非常小的数据包。您甚至可以为远程方法分配一种guid,并使用它们来节省通信量和加快内部通信
使用套接字的好处是,您的解决方案将具有相当大的可扩展性。应用程序集成通常有四种模式:
在查看答案中列出的特定库或技术之前,我建议您为自己选择正确的模式,然后调查您的特定选项。对不起,这是一个有点简单的答案,但是:我听说Resin app server支持集成java和PHP 他们声称他们可以将php和java结合在一起: 我使用了resin来服务J2ee应用程序,但没有使用它的PHP支持
我很想听到这样的冒险故事。为什么不使用web服务呢 创建一个Java层并放置一个ws-access(Axis、SpringWS等),Php使用一个ws-client访问Java层
我认为它简单而有用。我最近也遇到了这个问题。上面的树脂解决方案实际上是在Java中按照JRuby、Jython和Rhino的思路完全重写PHP。它叫栎树。但我猜你和我一样,放弃Apache/PHP设置并不是一个真正的选择 此外,Quercus还有更多的问题:免费版本是GPL,如果你正在开发商业软件(虽然没有Resin希望你相信的那么复杂(但是IANAL)),这是很棘手的,而且免费版本不支持编译成字节码,所以它基本上是用Java编写的解释器 我最终决定只通过HTTP交换简单的消息。我使用PHP的
json_encode()
/json_decode()
和Java的代码对json中的消息进行编码(简单、基于文本、与数据模型非常匹配)
另一个有趣且轻量级的选项是让Java生成PHP代码,然后使用PHP include()指令通过HTTP获取并执行它。不过我还没试过
如果您关心的是实际的HTTP调用(为了性能),那么这两种解决方案都不会有帮助。我所能说的是,我在同一个局域网上使用PHP和Java时没有遇到任何问题。我的感觉是,对于绝大多数应用程序来说,这不会是一个问题,只要您使您的RPC调用具有相当的过程粒度(无论如何,您确实应该这样做)。通信实际上是双向的。然而,即使这是一种方法,我们仍然需要处理文件锁定。它可以通过使用命名管道来解决,但这仍然被认为是一个中间层。引言中写道:“警告:此扩展是实验性的。此扩展的行为包括其函数的名称和任何其他文档