移动客户端/服务器应用程序的通信方式:Socket vs HTTP

13

我最近决定着手开展一个庞大的软件工程项目,涉及开发基于客户端-服务器的应用程序。我的计划是尽可能地开发多个客户端,包括本机的iPhone、Android和Blackberry应用程序以及基于Web的应用程序。

对于我的服务器,我计划使用运行MySQL数据库的Linux系统的VPS(可能来自slicehost.com)。我的第一个问题是客户端与服务器接口的策略是什么。我的想法有:

  1. 基于HTTP-POST或GET的与PHP脚本通信。
    这是我非常熟悉的领域——从表单中传递信息到PHP脚本中,处理它并返回输出。我假设我希望将输出返回给客户端作为某种基于XML或JSON的字符串。我还假设我希望为希望与我的服务器交互的客户端创建一个定义良好的API。

  2. 基于套接字的与PHP脚本、Java程序或C++程序通信
    我对此不太熟悉。我曾经使用过创建套接字、监听连接并返回数据的基本教程。我假设在这种方法中,通信数据开销要比基于HTTP的方法少得多。我的梦想是有很多并发客户端在使用,都与服务器/数据库交互。我不确定简单的基于HTTP/PHP脚本的通信设计能否有效地扩展以满足许多客户端的需求。此外,我可能最终需要由各种服务器事件触发的服务器推送到客户端的功能。我也不确定哪种编程语言最适合这种情况。如果效率是一个重要问题,我想PHP脚本可能不够高效?

是否有一种通常被接受的方法来处理这个问题?对我来说,这是试图弥合我的当前技能之间差距的尝试。我有很多PHP和与MySQL数据库交互以提供动态Web页面的经验。我还有很多开发本机iPhone应用程序的经验(但没有任何重要的基于服务器的通信)。此外,我曾经使用过Java/C++,并且开发了两种语言的应用程序,它们都与MySQL交互。

我预计我的客户不会向/从服务器发送/接收大量数据。与给定客户端事件相当的一组字符串。

另一个问题:使用VPS-好主意吗?我显然不想为完整专用服务器付费(slicehost提供从大约20美元/月开始的VPS),我认为VPS将能够满足几个最初客户的要求。随着越来越多的用户开始与我的服务器进行交互,我认为可以迁移到更大的“片”并可能最终移动到完整的专用服务器(如有必要)。

感谢您的建议! :)


嗨,Casey。你最终选择了哪种方法?我有与你相同的要求,也在思考要实现哪种方法。 - Kritz
嗨@Johan,我不知道你的具体要求 - 但我绝对支持使用HTTP POST / GET请求进行客户端/服务器通信。如果您正在开发可在不同客户端上运行的移动应用程序,请考虑使用基于Web的移动应用程序框架,例如sencha-touch或jquery mobile w / phonegap。随着手机和平板电脑变得越来越强大,本机应用程序和移动应用程序之间的可辨别差异越来越小。如果您需要任何实时通信,请尝试“pusher”最后使用PAAS。我推荐APPFOG或CloudFoundry。它们是开源的 :) - Casey Flynn
感谢@Casey。我的具体需求很简单,但是可选项很多。我有一个硬件设备将数据发送到服务器。然后服务器必须根据需要向移动设备(android / iphone / bb)发送通知。这些设备还将向服务器发送命令,这些命令将被中继到硬件设备。系统可能会有数千个连接,并且必须非常响应迅速。对于服务器,您建议我使用php处理http请求吗?换句话说,给定我的要求,您认为实现服务器的最佳方法是什么? - Kritz
根据可用的开发人员和资源,实现服务器所需的语言可能是PHP。Ruby也可以完成任务。如果你真的担心处理大量并发连接,nodeJS是一种相对较新的技术,以“非阻塞”而闻名,意味着它专门处理并发请求。根据移动应用程序之间及与服务器之间的通信复杂程度,您可能能够使用双向短信进行通信,我推荐使用“twilio”。 - Casey Flynn
1个回答

5
我建议您使用HTTP,至少在需要超出其功能时再考虑其他选项。(应用程序需要更多状态信息,HTTP的适用性就越小)。
如果您需要低成本和可扩展性,您可能无法找到比Rackspace或Amazon等云服务更好的选择。但是我刚刚开始使用它们,直到现在我的服务器一直是来自tektonic的VPS。

你能详细解释一下你所说的“有状态”是什么意思吗?谢谢! - Casey Flynn
HTTP是一种无状态协议,尽管有许多技巧用于使其保持状态。 - jcomeau_ictx
1
关于编程语言,出于各种原因我不太喜欢PHP,而更喜欢Python。但如果你擅长PHP,我认为没有什么特别的理由不继续使用它。 - jcomeau_ictx
嗯,rackspace看起来非常有趣。谢谢你的建议。我假设基于HTTP-POST的通信设置将阻止我执行基于服务器事件的服务器推送到应用程序?应用程序必须查询服务器以获取更新? - Casey Flynn
1
说实话,我不知道有什么方法可以使用HTTP从服务器推送到客户端。我不想说这是不可能的,因为几乎不可避免地,总有人会证明这样的断言是错误的。在我的职业生涯中,我曾经做过很多“不可能”的事情。 - jcomeau_ictx

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接