socket 、 socketio 和 websockets 之间的区别
Posted
技术标签:
【中文标题】socket 、 socketio 和 websockets 之间的区别【英文标题】:Difference between the socket , socketio, and websockets 【发布时间】:2020-10-10 12:08:57 【问题描述】:有人可以解释一下socket,socketio,flask socketio在python方面的区别吗? 为了使用这个带有颤动的套接字,我应该在后端编写什么代码?比如我应该写服务器和客户端还是只写客户端?
【问题讨论】:
【参考方案1】:socket 是网络上运行的两个程序之间双向通信链路的一个端点。这是一个非常底层的东西,其他一切都是在 TCP 套接字之上实现的。
WebSocket 是网络的标准通信协议。它允许在客户端和服务器之间建立全双工通信通道。
Socket.IO 是一种建立在 HTTP 和 WebSocket 之上的通信协议,提供额外的功能,例如自动重新连接、基于事件的通知等。
Flask-SocketIO 是作为 Flask 扩展的 Socket.IO 服务器端协议的实现。
要从您的 Flutter 应用程序访问 Socket.IO 服务器,您需要使用 Socket.IO 客户端。我自己不使用颤振,所以我不能推荐一个。
【讨论】:
谢谢,这很有帮助!所以最后我必须为flutter编写代码作为socket客户端和flask socketio作为服务器编写? socket中的“双向通信”和WebSocket中的“全双工通信”不一样吗? @PeDro 是的。但是,您要说明什么?网络套接字是低级的东西,WebSocket 是使用网络套接字的高级协议。【参考方案2】:HTTP 请求是这样的,如果我们使用浏览器在 URL 或搜索栏上写一些东西,那么
-
浏览器向服务器发送请求,即向服务器发出 HTTP 请求。
服务器用一些数据响应浏览器。
这需要一些东西,得到一些东西,这种系统适用于各种各样的事情,比如阅读新闻或查看天气。
但如果你想获得更实时的信息,比如聊天,你就必须一直在请求。
Websocket 的目的是允许与后端服务器建立持久的“连接”,这样客户端就不必像浏览器那样等待另一个时间。
因此任何人都可以创建一个后端和前端组合系统,该系统可以非常快速且响应迅速地对新数据做出反应,就好像它是流入您的客户端(如网络客户端、移动应用程序)的流一样
你必须同时编写服务器和客户端来实现实时应用,并且客户端需要连接到服务器。
如果你想制作一个视频通话应用程序,那么你需要交换一些信息,如SDP、ICE Candidate 等。所以要交换这些信息,你必须开发一个信令服务器,以便服务器可以将这些信息发送到实时发送到其各自的客户端。
在每一个平台上,都可以实现socket技术。所以socketio、flask socket是同一个东西在不同平台的不同形式。
【讨论】:
兄弟,所以我必须为客户端部分和后端代码编写颤振代码作为烧瓶 socketIo?还好吗? 是的,兄弟。绝对地。我想你明白了。 兄弟,如果你想开始使用 Flutter,可以查看this tutorial。这里的后端服务器是用 nodejs 制作的。没关系,你也可以用flask构建它。 哈哈,兄弟,你是最棒的!我是机械工程师,所以我没有深入的知识。但是你解决了我的问题 哈哈哈,我的荣幸兄弟。【参考方案3】:简而言之,WebSocket 是建立在设备 TCP/IP 堆栈之上的薄传输层。其目的是为 Web 应用程序开发人员提供本质上尽可能接近原始的 TCP 通信层,同时添加一些抽象来消除在 Web 工作方式方面可能存在的某些摩擦。它们还迎合了这样一个事实,即 Web 具有必须考虑的额外安全考虑,以保护消费者和服务提供商。 Ably 的深入研究是掌握 websockets 的绝佳资源:http://go.ably.com/websockets
对于希望在客户端和服务器之间建立双向套接字连接的开发人员来说,Socket.IO 是一个很好的工具。这使得实时聊天等简单的应用程序更易于实现。 Socket.IO 使许多事情变得更容易,并为不受支持的客户端提供后备,但也有其自身的权衡。 Ably 还写了一篇概念文章,概述了 Socket.IO 的主要用例以及如何开始:http://go.ably.com/socketio
【讨论】:
以上是关于socket 、 socketio 和 websockets 之间的区别的主要内容,如果未能解决你的问题,请参考以下文章
安装 socket.io 时 SocketIO.Server 对象消失
socket.io、netty-socketio、nginx 每分钟断开连接
socketio 中 `socket.broadcast.to(param)` 的用途是啥