随着 Oracle, Sybase, SQL Server ,DB2, Mysql 等人陆陆续续住进数据库村, 这里呈现出一片兴旺发达的景象, 无数的程序在村里忙忙碌碌, 读写数据库, 实际上一个村落已经容不下这么多人了, 数据库村变成了数据镇。
这一天, 数据库镇发生了一件大事: 它连上了网络!
外部的花花世界一下全部打开, 很多程序开始离开这个拥挤的城镇, 住到更加宜居的地方去。
可是他们的工作还是要读写数据库, 大家都在想办法能不能通过网络来访问数据库镇的数据库。
其中移居到Tomcat村的Java 最为活跃, 这小子先去拜访了一下Mysql , 相对于Oracle, Sybase 等大佬, Mysql 还很弱小, 也许容易搞定。
Java 说: “Mysql 先生, 现在已经网络时代了, 您也得与时俱进啊, 给我们开放下网络接口吧。 ”
Mysql 说: “还网络时代, 你们这些家伙越来越懒了, 都不愿意到我们家里来了! 说说吧, 你想怎么开放? ”
Java 说: “很简单, 您听说过TCP/IP还有Socket 没有? 没有吗?! 没关系, 您的操作系统肯定知道, 它内置实现了TCP/IP和socket, 您只需要和他商量一下, 需要申请一个ip , 确定一个端口, 然后您在这个端口监听, 我每次想访问数据了, 就会创建一个socket ,向你发起连接请求, 你接受了就行了。 ”
(刘欣注: 参见《张大胖的socket》)
“这么麻烦啊?”
“其实也简单, 您的操作系统会帮忙的, 他非常熟悉, 再说只需要做一次就行, 把这个网络访问建立起来, 到时候很多程序都会来访问您, 您会发财的。 ”
“不会这么简单吧, 假设说, 我是说假设啊, 通过socket我们建立了连接, 通过这个连接, 你给我发送什么东西? 我又给你发什么东西?” Mysql非常老练, 直击命门。
“呃, 这个.... ”
Java 其实心里其实非常明白, 这需要和Mysql定义一个应用层的协议, 就是所谓的你发什么请求, 我给你什么响应。
例如:
客户端程序先给Mysql 打个招呼, Mysql也回应一下, 俗称握手。
怎么做认证、授权, 数据加密, 数据包分组。
用什么格式发送查询语句, 用什么格式来发送结果。
如果结果集很大, 要一下子全发过来吗?
怎么做数据缓冲?
......
等等一系列让人头痛的问题。
本来Java是想独自定义, 这样自己也许能占点便宜, 没想到Mysql 直接提出来了。
“这样吧 ” Java 说 “我们先把这个应用层的协议定义下来, 然后您去找操作系统来搞定socket如何? ”
“这还差不多 ” 。 Mysql 同意了。
两人忙活了一星期, 才把这个应用层协议给定义好。
然后又忙了一星期, 才把Mysql 这里的socket搞定。
Java 赶紧回到Tomcat村, 做了一个实验: 通过socket和mysql 建立连接, 然后通过socket 发送约定好的应用层协议, 还真不错, 一次都调通了, 看来准备工作很重要啊。
(刘欣注: 这是我的杜撰, mysql 的网络访问早就有了, 并不是java 捷足先登搞出来的)