Socket编程与Web服务有什么区别?

23
我想创建一个移动消息服务,但我不知道使用套接字编程还是网络服务更好?
在创建这样的服务时需要考虑哪些问题?例如连接成本等。
如果需要更多细节,请在投票问题关闭之前告诉我!

1
谁给它投了反对票!告诉我为什么? - Adham
很难理解你在问什么。Web服务通过套接字工作——这不是非此即彼的关系。另外,“有哪些问题需要考虑…”似乎基本上要求回答者写一本书。 - hmakholm left over Monica
据我所知,Web服务使用HTTP协议,其中HTTP数据包具有许多额外的数据(标头),这意味着会产生更多的流量消耗。因此,使用套接字编程来设计我们的协议以减少这种问题是否有效呢?关于考虑事项,如果您不需要详细信息,我需要重要的标题。 - Adham
2
请不要无故要求关闭我的问题! - Adham
我认为这个问题很有用,因为我也对这个主题感到困惑,当我看到这样的问题时,我个人会得到更多的线索去搜索。谢谢ADHAM :) - Aex Sun
我不理解。为什么不是建设性的? - parseh
1个回答

19

Webservices通常比较容易实现,因为有很多开发者工具、库和框架对它们提供了支持。

然而,特别是如果你要传输的负载很小(比如典型的短信或推文大小),那么使用webservices会增加很多额外的开销:通过GPRS或UMTS等无线网络发送的字节仍然非常昂贵,与通过电缆或ADSL传输的字节相比。此外,web服务还会携带一些不可见的信息层,最终客户也需要为它们付费。

因此,如果你的用例基于短消息,我建议至少进行一些带宽模拟计算,并根据带宽节省与应用程序复杂性增加之间的权衡做出决策。

在查看socket时,也可以了解一下UDP:如果你能接受这样一个事实,即基本上你只需将消息抛给某个人,而不需要在协议中设计一些确认机制来确保消息到达,那么它非常高效,因为没有流量创建和维护连接,即使是相当长的消息也可以很好地传输到1个UDP数据包内。

编辑基于评论:

  • 流套接字:不确定您如何定义流,但对我来说,流和消息是两个非常不同的概念。流通常是被发送的较长的数据序列,而消息则是由接收方发送并可选择确认或回复的实体。
  • 带宽模拟:最简单的理解方法是使用Wireshark来查看在从网络请求一个非常短的字符串时传输的所有内容,包括几个层次的管理信息(即不可见的信息,只是为了让不同的协议层正常工作),这些都是由最终用户支付的流量。然后,编写一个使用UDP传输相同消息的小型虚拟服务,或者使用类似netcat的工具,这里有一个很好的教程here,并计算传输的字节数。您将看到在交换的字节数方面存在相当大的差异。
  • 编辑2,我忘了提到的事情:移动网络曾经是开放、透明的网络,设备通过公共IP地址进行标识。目前向NAT的移动网络的快速发展对于"围墙花园"内外设备之间的通信(NAT穿透)产生了影响,设计通信通道时需要考虑这一点。

    至于在聊天应用程序中使用数据流:它提供了一些概念上的优势,但您也可以很好地将聊天应用程序置于UDP之上。查看这里这里


请问您能否提供更多关于“我至少建议进行一些带宽模拟计算”的细节?非常感谢您提供的非常有用的信息。 - Adham
你认为这种服务背后的技术是什么?http://www.redmondpie.com/chaton-for-iphone-android-and-blackberry-is-samsungs-answer-to-imessage-video/ - Adham
抱歉,我是指在流中。如果我想实现在线聊天,这是一个好的概念吗? - Adham
好的,先生,我会接受您的答案,但是您能否回答一下这里的第二条评论吗?关于附加的链接? - Adham
@adham 我不知道他们的具体协议,如果你能在运行他们服务的设备上嗅探(使用类似Wireshark的工具进行嗅探),你会立即知道的 :-) - fvu
非常感谢您,先生。我可以得到您的电子邮件以直接联系您吗? :) - Adham

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