• 什么是驱动?socket网络编程用来干什么的?现在算是理解了一点


    最近在学习 Redis,想用 Redis 的列表键实现一个消息队列

    可是,想到怎么像 RabbitMQ 一样,作为一个独立的组件对外提供服务(而不是在简单的代码中用类来封装)的时候,突然就懵了。

    仔细想想,其实 MySQL、Redis 和 RabbitMQ 都是这样提供独立服务的,而他们并没有提供 HTTP 接口(平常就知道这一种网络通信方式,不用这个就不知道咋办了),而我从来都没去想过它们是怎么对外提供服务的。

    然后想到了 socket,之前学 IO 多路复用,学网络,都有提到 socket 编程,但当时只理解到 socket 是运输层向上提供的接口,没有意识到,原来所谓的 socket 编程,就是各种服务用来对外提供服务的方式,而客户端要想跟服务通信,也得进行对应的 socket 编程

    然而,我们在使用 Redis、MySQL 和 RabbitMQ 的时候,都并没有自己写 socket 的代码,这肯定是有人帮我们做了,并且做了封装,让我们感觉不到 socket 的存在。

    谁帮我们做的?是“驱动”

    以 MySQL 驱动为例
    首先,在某台服务器上部署了 MySQL 服务,它默认监听了 3306 端口。那么,这时候我们要怎么访问这个服务呢?
    它没有提供 HTTP 接口,我们不能用 HTTP 协议去访问它。
    大概的思路是,将数据发往服务所在服务器的 3306 端口,这样服务就能接收到了
    那么数据要以什么样的格式发呢?我们发的时候,是不是要自己写 socket 编程,去和 MySQL 服务交换网络包呢?如果这些细节都让使用者一一实现,会非常繁琐,也会有不小的难度。
    这时,MySQL 为了让更多的 Java 程序员使用它的服务,就必须按照 Java 定义的 JDBC 协议,帮助做一些简化工作,然后 MySQL 开发者提供了跟他们服务交互的 SDK,就是所谓的 MySQL 驱动。
    这样一来,整个交互就变成了 Java - JDBC - MySQL驱动 and 数据源配置信息 - MySQL 服务,普通的 Java 程序员需要做的就是,安装 MySQL 驱动以及配置数据源信息,就可以直接和 MySQL 通信了。至于跟 MySQL 进行网络交互的 socket 编程和数据格式的适配,都由 MySQL 驱动代劳了。
     
    而在 Redis 中,Jedis就是 Redis 提供给 Java 的 SDK(或者说驱动)
     

    当然,用 Redis 以一个独立服务的方式消息度列,我暂时是做不了了,难度比较大,比较耗时间

    但通过思考和不断的追问,把以前的学的知识点(驱动、socket编程、SDK)串起来了,对很多东西都有了新的理解,这样学起来非常有趣

    贴两篇相关文章,一篇是我以前的博客,一篇是公众号“码农翻身”的文章

    1、码农翻身公众号文章“JDBC 的诞生”,讲到了相关的信息

    https://mp.weixin.qq.com/s/Oduo_H_r9gJupzfivz0Q9g

    2、这是我之前的一篇博客,从“依赖倒置原则”角度,理解的 MySQL 为什么要遵循 JDBC 规范
     
     
  • 相关阅读:
    Zepto源码分析-动画(fx fx_method)模块
    CSS3用法理解
    移动端网页meta设置和响应式
    javascript基础-正则表达式
    net core 2.x
    angular
    .net core 2.x
    .net core 2.x
    DDD
    DDD
  • 原文地址:https://www.cnblogs.com/stone94/p/13985322.html
Copyright © 2020-2023  润新知