socket、websoket、netty、socket.io 对比

Socket Socket中文意思“套接字”,是进程间进行网络通信的抽象。 通过Socket提供的API可以: Connect:和别的节点建立连接; Bind:绑定本地指定端口; Read:读取其它节点发送的数据; Write:向其它节点发送数据; Close:关闭连接针对不同的传输层协议,Socket提供了不同的API,可以是TCP协议,也可以是UDP协议; 注意:Socket通信特点是全双工的,即通信两端可以互相发送、接收消息;这点很重要,WebSocket就是利用这一特性。 WebSocket WebSocket可以理解为“Web”+“Socket”为什么需要WebSocket:Web通信一般基于HTTP协议, 但是HTTP最初设计为无状态的短连接【虽然http2/3已经做了改进,支持长连接、多路复用等特性】, 对于连续传递数据的场景可能需要频繁的进行连接创建、传输数据、连接断开操作。而HTTP是基于TCP实现的, 建立TCP连接需要三次握手,断开连接需要四次挥手。这其实是非常低效且浪费资源的。 为了解决上面的问题,WebSocket协议基于TCP实现了长连接机制,一次连接周期内可以进行全双工通信, 避免频繁创建连接、断开连接带来的性能开销。 Netty Netty是Java语言实现的应用层网络框架,其对网络通信模型做了更高层次上的抽象。 使用Netty进行网络编程时,可以任意选择底层通信协议。如:HTTP通信,或者WebSocket, 当然也可以基于TCP/UDP自定义通信协议。 socket.io和netty-socketio socket.io是基于Node.js实现的网络通信框架,支持基于事件的双向通信。 使用了WebSocket【或HTTP长连接】作为底层的通信协议。主要用于浏览器和服务器间的通信。 socket.io在基本的通信能力基础上,还提供一些非常实用的功能,如:自动重连心跳检测多路复用机制

netty-socketio netty-socketio是基于Netty框架实现socket.io服务端。 关于协议和实现:协议定义了标准和规范,其实现方式或者说实现语言可能有多种, 比如:socket.io本质上也是一种通信标准,其client和server可以有多种实现方式。 如:原生的server是通过Node.js实现的。而netty-socketio是基于netty实现的socket.io server。 python-socketio是基于python语言实现的socket.io server。

经验分享 程序员 微信小程序 职场和发展