2022-09-24 00:36:36
驱动是用于屏蔽底层通信细节、提供简化交互接口的软件组件;Socket网络编程用于实现不同设备间的底层网络通信,是服务对外提供服务的基础方式。
一、驱动的定义与作用屏蔽复杂性:将Socket编程、数据格式适配等底层操作封装,用户无需直接处理网络字节流。例如,MySQL驱动自动处理与3306端口的TCP连接及协议解析。
标准化接口:遵循统一规范(如JDBC),使不同数据库或服务可通过相同方式访问。Java程序员通过JDBC接口调用MySQL驱动,无需关心驱动内部实现。
跨语言支持:驱动针对不同编程语言提供SDK(如Redis的Jedis驱动),扩展服务兼容性。
服务端:绑定IP和端口(如MySQL的3306),通过accept()等待连接,使用read()/write()收发数据。
客户端:通过connect()连接服务端端口,建立双向通信通道。
基础性:所有高级协议(如HTTP、JDBC)均基于Socket实现。
灵活性:需手动处理连接管理、数据序列化及并发问题(如IO多路复用)。
驱动封装Socket:驱动内部实现Socket编程,将高层API调用转换为网络数据包。例如,JDBC驱动通过Socket与MySQL交换按协议封装的字节流。
用户无感知:开发者仅需调用驱动提供的API(如Connection.createStatement()),无需直接操作Socket。
MySQL通信流程:Java应用→JDBC接口→MySQL驱动(Socket编程)→TCP/IP网络→MySQL服务。
Redis通信流程:Java应用→Jedis驱动(封装Socket)→Redis服务(监听6379端口)。
监听端口:如Redis默认监听6379端口,通过Socket的bind()和listen()启动服务。
协议处理:解析客户端发送的自定义协议数据(如Redis的RESP协议)。
直接Socket编程:手动创建Socket连接,按服务协议构造数据包(高复杂度)。
通过驱动访问:使用驱动提供的API,驱动自动完成Socket连接及协议封装(如Jedis的jedis.lpush("queue", "message"))。
简化开发:驱动处理连接池管理、重试机制、数据序列化等底层逻辑。例如,JDBC驱动自动管理TCP连接的生命周期。
协议适配:将高层API调用转换为服务端预期的协议格式。如MySQL驱动将SQL语句转换为内部协议包。
开发者配置JDBC URL(如jdbc:mysql://host:3306/db)及凭证,驱动自动建立Socket连接并认证。
执行SQL时,驱动将语句封装为MySQL协议包发送,解析返回结果集。
使用Jedis时,new Jedis("host", 6379)即通过Socket连接Redis,后续操作(如set/get)由驱动转换为RESP协议。