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。

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Spring Boot 可以通过使用 Spring Websocket 模块来整合 Socket.IO。具体步骤如下: 1. 添加依赖 在 pom.xml 文件中添加以下依赖: ``` <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-websocket</artifactId> </dependency> <dependency> <groupId>com.corundumstudio.socketio</groupId> <artifactId>netty-socketio</artifactId> <version>1.7.16</version> </dependency> ``` 2. 配置 Socket.IO 在 Spring Boot 的配置文件中添加以下配置: ``` server: port: 8080 socketio: port: 9092 ``` 3. 创建 Socket.IO 服务器 在 Spring Boot 应用程序中创建 Socket.IO 服务器: ``` @Configuration @EnableWebSocket public class SocketConfig implements WebSocketConfigurer { @Override public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) { SocketIOServer server = new SocketIOServer(configuration()); registry.addHandler(new SocketIOHandler(server), "/socket.io").setAllowedOrigins("*"); } @Bean public Configuration configuration() { Configuration config = new Configuration(); config.setHostname("localhost"); config.setPort(9092); return config; } } ``` 4. 创建 Socket.IO 处理程序 创建一个 Socket.IO 处理程序来处理客户端的连接和消息: ``` public class SocketIOHandler extends SocketIOServer { public SocketIOHandler(Configuration configuration) { super(configuration); addListeners(); } private void addListeners() { addConnectListener(client -> { System.out.println("Client connected: " + client.getSessionId()); }); addDisconnectListener(client -> { System.out.println("Client disconnected: " + client.getSessionId()); }); addEventListener("message", String.class, (client, data, ackSender) -> { System.out.println("Received message: " + data); broadcast("message", data); }); } } ``` 5. 创建客户端 创建一个 Socket.IO 客户端来连接到服务器并发送消息: ``` var socket = io.connect('http://localhost:9092'); socket.on('connect', function() { console.log('Connected to server'); }); socket.on('message', function(data) { console.log('Received message: ' + data); }); socket.emit('message', 'Hello, world!'); ``` 这样就完成了 Spring Boot 和 Socket.IO 的整合。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值