gpt4 book ai didi

java - 数据库作为 IPC 反模式

转载 作者:可可西里 更新时间:2023-10-31 22:48:53 24 4
gpt4 key购买 nike

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

用户请求 --> DB <-- Poller --> RequestHandler --> StoreResult in DB --> Web Client 使用结果 (AJAX) 更新页面。

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

有人对这个策略有什么意见吗?我读过使用数据库作为 IPC 反模式是不好的做法,或者至少是不合适的做法。然而,替代方案——XMLRPC、命名管道——似乎涉及额外的依赖关系。

感谢您的关注。

最佳答案

如果是我,我需要 PHP 从 Java 服务中获取/使用数据,我会转储数据库。

让带有 HTTP 的 java 服务监听 127.0.0.1,端口 5544(或一些随机的#)。让 servlet/jsp 接受 RESTful 请求,并输出 JSON 结果。因此,如果它是一个搜索,URL 将是:

h ttp://127.0.0.1:5544/search_zip_code/80203

结果将是简单的 json:

{ “城市”:“丹佛”,“州”:“科罗拉多” }

然后在 PHP 端执行 curl 请求 - 使用用户输入的参数构建 URL,执行 curl 请求,获取数据并对其进行 json_decode ( $result_array = json_decode($curl_result); )。

这很简单。这样,您可以轻松地测试任一组件(从命令行执行 curl/wget 来测试 java 服务,或者检查服务器端的 access_logs 以查看搜索参数和来自客户端的连接)。

对于 PHP 端,使用 curl_exec 和 json_decode(在 PHP 手册中搜索这些函数)。

这是我为 Java 端找到的一个随机链接:

Parsing JSON data with java servlet struts

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

关于java - 数据库作为 IPC 反模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3815941/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com