实施可扩展且高性能的Web应用程序

时间:2010-04-30 22:19:38

标签: php web-services

我之前在这里问过几个与此有关的问题,但这更像是一个整合问题,因为我想检查一下我是否掌握了所有内容。

我正在开发一个社交媒体网络应用程序,虽然我有很多使用Java和PHP编写的经验,但我这次尝试的东西有点不同。我已经模块化了应用程序的每个组件。因此,例如,应用程序的一个组件允许用户互相私下消息,我将其拆分为自己的私人消息服务。我还创建了一个用户数据服务,其目的是从数据库返回有关用户的数据,例如他们的姓名,地址,年龄等。他们也是另一项服务,朋友服务,它将使用neo4j数据库来创建社交图。我做这一切的原因是允许我在需要时更新单独的模块 - 所以当他们现在大部分时间都运行MySQL时,如果我认为它合适,我可以稍后将其移到Cassandra。

Web应用程序的实际代码实际上只用于最终构建。它背后的模块并不真正遵循任何严格的REST或SOAP协议。基本上我们API上的每个方法都变成了PHP程序脚本。然后,这可能会调用其他后端代码,这些代码往往是OO。 Web应用程序向这些页面发出CURL请求,并向其发送POST数据或从中获取数据。然后这些页面返回需要数据的JSON。

关于我如何确定当时登录的用户,我仍然有点混淆。我只是使用会话吗?就像我们调用get-messages.php脚本等同于该用户的getMessages()方法 - 返回该用户的所有私人消息 - 后端代码如何知道将用户ID发布到哪个用户脚本不安全。任何人都可以这样做并获得所有消息。所以我想我会使用会话。我对此是否正确?

任何人都可以发现我在这里做的任何其他问题吗?

由于

3 个答案:

答案 0 :(得分:0)

对我来说,看起来各个组件之间的通信会有很多开销。

每页视图多次发出POST / GET请求以及编码和解码JSON将非常昂贵

答案 1 :(得分:0)

  

我是否只使用会话[识别登录用户]?

是的,通常当前用户ID将被放入会话中。但是,为了获取登录用户的列表,您还需要将当前登录的用户存储在数据库中,并在人们登录/退出以及会话被销毁时更新。

  

任何人都可以发现任何其他问题   我在这里做什么?

只是质疑你为什么使用PHP作为Java后端的包装器?为什么不使用Java堆栈的面向Web的位,例如JSF?

答案 2 :(得分:0)

您创建的内容听起来很像其他任何REST界面,例如Twitter API。在这种情况下,您可以考虑查看这些API如何处理用户会话。

通常会有某种握手过程为客户端提供用户令牌,只要该会话处于活动状态,客户端就会使用该令牌从API获取数据。

因此,在这种情况下,您必须开发用于生成用户令牌的接口,然后让后端管理这些会话。对于像get-messages.php这样的各种接口,你可能会把$ userToken作为$ _GET或$ _POST变量,并根据你的活动用户会话数据库进行验证。