【问题标题】:Should I use sockets in client/server application?我应该在客户端/服务器应用程序中使用套接字吗?
【发布时间】:2016-04-25 10:09:29
【问题描述】:

类似:Socket vs HTTP based communication for a mobile client/server application

我目前正在开发一个基于 Java 客户端-服务器的程序(打算将它变成一个 Android 应用程序)。我已经成功实现了服务器引擎,并且客户端连接和交换数据很漂亮。我的实现基于我的this 回答。

缺点是,所有通信都是直接通过套接字完成的,根本没有协议。这是公认的、安全的或专业的客户端-服务器通信方式吗?

更进一步,如果我想接受信用卡、PayPal 或 Google 钱包,我的应用程序是否符合他们的安全标准,因为我不使用 SSL?如果我使用自己的安全级别,比如javax.crypto.CipherOutputStream,会怎样?

【问题讨论】:

  • 可能会考虑将您的消息包装成容器格式,如protocol buffers 并对其进行加密。
  • @Marged 是的,别笑,但优点是我不必学习新东西......而且我可以完全控制一切,因为我自己实现了所有内容。跨度>
  • @Marged 嗯,很难理解你。请详细说明。
  • @Marged 你为什么不写一个答案?看来你对这个话题有很多话要说。
  • 使用常用协议/库的一大优势是它已经在野外和实战中测试过了。无论你多么有能力,实施自己的事情都是有风险的。

标签: java sockets security


【解决方案1】:

您的问题可能过于宽泛,但无论如何 ;-) 由于我们不知道您自己的基于套接字的通信协议的“质量”和深度,因此很难判断它是否能够“竞争” " 与其他协议。因此,让我们假设您处理了必要的事情,并且您的服务器能够处理许多并行连接并遵循“最佳实践”。

我看到了实现自己的协议的优势,您已经提到了它们:

  • 它基于您已经知道并感觉舒适的东西(插座)
  • 您拥有完全的控制权,无需依赖任何框架
  • 您知道实施的“胆量”,并且在出现问题时是第一权威

但肯定有缺点和风险:

  • 不仅可以你做任何事情,这很快就会成为必须
  • 您的方案需要在实验室条件之外正常工作。在现实世界中,您不会看到有线或 Wifi 网络的质量。 2G/3G/4G 网络可能不稳定、出现中断并且传输速度可能很慢
  • 某些环境可能存在非 http(s) 流量问题

如果您实现自己的基于套接字的协议的原因是效率,那么还有其他协议不是“健谈”并且在字节级别上工作。例如,如果您真的考虑更换,可以看看 MQTT。

如果你对 http 不过敏,你可以看看 REST over https。

但是,无论您认为哪种协议“适合”您的应用程序的主要通信:您始终可以为有此需求的服务混合 http(s)。

【讨论】:

  • 这是一个完整的答案;谢谢,我会接受的。
【解决方案2】:

WebSocket 是一种低级协议,可以将其视为 Web 上的套接字。每件事,包括一个简单的请求/响应设计模式,如何创建/更新/删除需要的资源,状态代码等都建立在它之上。所有这些都针对 HTTP 进行了很好的定义。

WebSocket 是有状态协议,而 HTTP 是无状态协议。

众所周知,WebSocket 连接可以在单个服务器上垂直扩展,而 HTTP 可以水平扩展。 WebSocket 水平扩展有一些专有的解决方案,但它们不是基于标准的。 HTTP 附带许多其他好处,例如缓存、路由、多路复用、gzip 压缩等等。所有这些都需要在 WebSocket 之上定义。 搜索引擎优化 (SEO) 将如何与 WebSocket 一起使用?非常适用于 HTTP URL。 所有代理、DNS、防火墙尚未完全了解 WebSocket 流量。他们允许端口 80,但可能会通过首先窥探来限制流量。 WebSocket 的安全性是孤注一掷的方法。

【讨论】:

  • 但是我有自己的套接字连接实现。我想知道是否建议使用?
【解决方案3】:

更好的方法可能是将基于套接字的连接替换为执行相同功能的 RESTFul API。使用这种方法,您将能够使用 PayPal 并接受积分。此外,您可以使用更标准的方法(如 Ouath2)来处理身份验证。它也适用于 Android,具有与服务器组件通信的 RESTful api。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-19
    • 1970-01-01
    • 2014-01-14
    • 1970-01-01
    相关资源
    最近更新 更多