我编写了一个分层的Web应用程序,它包含一个与Java服务交互的富Web客户端(PHP).Web客户端托管在apache服务器上,java服务在同一台物理计算机上运行(重申:整个应用程序,客户端和服务在同一台物理计算机上运行).
用户请求 - > DB < - Poller - > RequestHandler - > StoreResult在DB - > Web Client更新页面中包含结果(AJAX).
客户端和服务之间的通信使用关系数据库来传递消息.java服务有一个单线程轮询器,它查找并处理来自客户端的任何消息/请求.系统有效,但我对自己的设计选择没有信心.
有没有人对这个策略有任何意见?我已经读到使用数据库作为IPC反模式是不好的做法,或者至少是不合适的做法.但是,替代方案 - XMLRPC,命名管道 - 似乎涉及其他依赖项.
谢谢你的期待.
如果是我,我需要PHP从java服务中获取/使用数据,我会转储数据库.
让java服务w/HTTP侦听127.0.0.1,端口5544(或一些随机#).让servlet/jsp接受RESTful请求,然后吐出JSON结果.因此,如果是搜索,则URL将是:
h ttp://127.0.0.1:5544/search_zip_code/80203
结果将是简单的json:
{"city":"丹佛","州":"科罗拉多"}
然后在PHP端执行curl请求 - 使用来自用户输入的参数构建URL,执行curl请求,获取数据并使用json_decode($ result_array = json_decode($ curl_result);).
这很简单.这样,您可以轻松地测试任一组件(从命令行执行curl/wget来测试java服务,或者检查服务器端的access_logs以查看搜索参数和来自客户端的连接).
对于PHP方面,使用curl_exec和json_decode(在PHP手册中搜索这些函数).
这是我为java方面找到的随机链接:
使用java servlet struts解析JSON数据
这种方式可扩展(易于分离服务),模块化(易于测试任一组件),并且可以更快地将结果传回客户端.