【问题标题】:Why Use Socket IO and not just Socket?为什么使用 Socket IO 而不仅仅是 Socket?
【发布时间】:2018-05-07 14:17:32
【问题描述】:

我在服务器-客户端程序之前构建(到目前为止,双方都在 python 中构建)。

最近我开始使用 swift 构建应用程序,我的目标是使用 python 为我的应用程序添加一个后端(我的应用程序是一个聊天应用程序)

我在互联网上搜索了一个教程,我只看到了服务器端和移动应用程序之间通信的两个选项,第一个是创建一个 API (REST) (request - response) - 我不能使用此解决方案,因为我想要实时聊天。 第二个选项是 web-sockets (socket.IO)。

所以,我的问题是为什么不使用简单的套接字技术(就像我以前在它只是 python 服务器端到 python 客户端时使用的那样 -> 导入套接字) - 网络上没有套接字

【问题讨论】:

    标签: python swift sockets websocket socket.io


    【解决方案1】:

    如果您使用的是 Socket.io 或 socketcluster.io(在 Socket IO 之上开发),您将获得以下功能

    • 可扩展性:- 它将水平扩展,添加更多节点(向外扩展)和线性(向上扩展)
    • 在压缩消息负载时减小负载大小
    • 通过中间件功能授权
    • 连接断开时自动重新连接

    如果您想使用自己的实现,那么您必须注意上述功能/解决方案,以解决用户群增加时出现的问题。

    【讨论】:

    • Socket.IO 限制了我的算法复杂性,它对后端的工作方式有非常明确的定义(包括所有断开连接的房间和螺柱..),以及我想做的事情更复杂一点,在 Swift 中有没有 Socket.IO 的套接字方式?
    • 您必须使用它来传递消息,尽管一旦您收到消息或命令,它可能具有模板依赖性,具体取决于您的用例,您可以根据您的要求快速路由它。尽管如此,如果 Socket.io 增加了复杂性,那么您可以将 Pub/Sub 模型放在您的通信之间,这将解决问题。
    【解决方案2】:

    我的理解是不再需要 Socket.IO,因为所有值得的浏览器都在不断地相互检查。 Socket.IO 适用于浏览器和服务器不支持相同技术的情况。这些天来,几乎所有东西都得到了支持,并且在不使用 Socket.IO 的情况下坚持使用 Socket 是完全安全的。更多细节在这里 - https://codeburst.io/why-you-don-t-need-socket-io-6848f1c871cd

    【讨论】:

    • 谢谢,但是 Swift 有没有办法使用简单的套接字?而且我仍然不完全理解-习惯上在套接字中制作移动应用程序和后端语音? (原来的sockets,不是socket.io和websockets)