当前位置:  开发笔记 > 编程语言 > 正文

数据库作为IPC反模式

如何解决《数据库作为IPC反模式》经验,为你挑选了1个好方法。

我编写了一个分层的Web应用程序,它包含一个与Java服务交互的富Web客户端(PHP).Web客户端托管在apache服务器上,java服务在同一台物理计算机上运行(重申:整个应用程序,客户端和服务在同一台物理计算机上运行).

用户请求 - > DB < - Poller - > RequestHandler - > StoreResult在DB - > Web Client更新页面中包含结果(AJAX).

客户端和服务之间的通信使用关系数据库来传递消息.java服务有一个单线程轮询器,它查找并处理来自客户端的任何消息/请求.系统有效,但我对自己的设计选择没有信心.

有没有人对这个策略有任何意见?我已经读到使用数据库作为IPC反模式是不好的做法,或者至少是不合适的做法.但是,替代方案 - XMLRPC,命名管道 - 似乎涉及其他依赖项.

谢谢你的期待.



1> 小智..:

如果是我,我需要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数据

这种方式可扩展(易于分离服务),模块化(易于测试任一组件),并且可以更快地将结果传回客户端.

推荐阅读
mobiledu2402851323
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有