1. 一脸懵比

今天又偶然看到socket,对socket有点简单的概念,知道是网络编程、客户端与服务端通信等,但是不是太了解,就随便搜了下,几千万条记录,随便点开看了几页,socket跟网络编程也是绑定在一起的,又搜了下,介绍也是好多。

随便点开了一篇,开头介绍到 “套接字socket是大多数程序员都非常熟悉的概念,它是计算机网络编程的基础,TCP/UDP收发消息都靠它。大多数程序员都非常熟悉的? 有点懵比了,开发做了10几年了,一直没怎么用过soket编程啊,看了一下,代码或者demo很快就能跑起来,可为毛以前一直没用到呢?用到什么地方了?难道我是一个假程序员?一直在做企业项目的开发,好像都没用到啊,难道做的假的项目?有点怀疑人生了。

2. 抓狂模式

作为java开发老鸟(i'm 软件老王),开始搜索java socket编程,运行了几个demo,也没啥啊,可还是那个疑惑,人家都说了大部分开发者都非常熟悉的,为啥我们以前的项目都没用啊?soket编程用到哪里去了?是不是在java的spring框架或者web容器tomcat、weblogic等封装好了,用了不知道而已?

3. 有点眉目

一边查看资料一边实现,从开始的搜索:“为什么要用socket”、“网络编程”、“java 网络编程”、“java socket编程”、“企业应用socket”看的一脸懵比,一直到“springboot socket”、“websocket”、“http与websoket”才大概明白怎么回事了。。

4. 初步介绍

java人员没用过socket编程很正常,假如有跟我一样的假程序员,以前没怎么用过socket编程,不用慌的一逼,不用怀疑人生,非常正常(泥煤的),计划先初步介绍下概念,后续有空了,加上代码demo再好好介绍下。

4.1 socket编程

Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。i'm 软件老王

socket是个大的概念一两句话介绍不清楚,先到有个概念吧,用到的地方有很多,语言也有很多,客户端/服务端的c/s模式用的尤其多,socket在windows下叫Windows Sockets,你桌面上的牵涉到通讯的,例如qq、酷狗、浏览器、桌面游戏啊等等吧,socket通信是计算机网络编程的基础,互联网上的通信离不开它。实现的语言也有很多C,C++,.net、python、java等等吧,都有对应的实现包。i'm 软件老王

4.2 java socket

java的socket相关包再java.net.*下面,但是java中用到socket的地方,其实不多。

JAVA2平台包括:J2SE(Java2 Standard Edtion)标准版、J2EE(Java2 Enterprise Edition)企业版、J2ME(Java2 Micro Edition)微缩版。
J2SE:包括构成Java语言核心的类。比如数据库连接、接口定义、网络编程类。
J2EE:包括了J2SE中的类,并且还包括了开发企业级应用的类。比如EJB、JSP等。i'm 软件老王
J2ME:包含了J2SE中的一部分类,主要用于手机软件开发。i'm 软件老王

J2SE和J2ME用的人少(本来想写基本没人用了,话不敢说那么满了),目前的java应用大部分是基于B/S模式,就是浏览器与服务器的,用的浏览器的http协议进行通信。

java 提供了socket操作包,但是使用的场景很少的。

4.3 HTTP连接

HTTP协议即超文本传送协议(Hypertext Transfer Protocol ),是Web联网的基础,也是手机联网常用的协议之一,HTTP协议是建立在TCP协议之上的一种应用。
HTTP连接最显著的特点是客户端发送的每次请求都需要服务器回送响应,在请求结束后,会主动释放连接。从建立连接到关闭连接的过程称为“一次连接”。
(1)在HTTP 1.0中,客户端的每次请求都要求建立一次单独的连接,在处理完本次请求后,就自动释放连接。
(2)在HTTP 1.1中则可以在一次连接中处理多个请求,并且多个请求可以重叠进行,不需要等待一个请求结束后再发送下一个请求。
​ 由 于HTTP在每次请求结束后都会主动释放连接,因此HTTP连接是一种“短连接”,要保持客户端程序的在线状态,需要不断地向服务器发起连接请求。通常的 做法是即时不需要获得任何数据,客户端也保持每隔一段固定的时间向服务器发送一次“保持连接”的请求,服务器在收到该请求后对客户端进行回复,表明知道客 户端“在线”。若服务器长时间无法收到客户端的请求,则认为客户端“下线”,若客户端长时间无法收到服务器的回复,则认为网络已经断开。

4.4 WebSocket

HTTP连接使用的是“请求—响应”的方式,不仅在请求时需要先建立连接,而且需要客户端向服务器发出请求后,服务器端才能回复数据,HTTP协议做不到服务器主动向客户端推送信息,这种方式没什么不好,从网络安全来讲,避免的了服务器端的不必要骚扰,
但是这种单向请求的特点,注定了如果服务器有连续的状态变化,客户端要获知就非常麻烦。我们只能使用"轮询":每隔一段时候,就发出一个询问,了解服务器有没有新的信息,轮询的效率低,非常浪费资源(因为必须不停连接,或者HTTP连接始终打开,i'm 软件老王)。
WebSocket就是在这种背景下产生的,WebSocket协议在2008年诞生,2011年成为国际标准。所有浏览器都已经支持了。它的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送技术的一种,它是http的一个补充。

4.5 初步结论

Java中的Websocket类似于HTTP协议,是一个协议而已,假如有跟我一样的假程序员(i'm 软件老王),以前没怎么用过,也不用慌的一逼,其实也没啥,好多或者说大部分企业的Java应用是用不到socket协议的,05/06年以后企业把以前的CS模式升级到B/S模式,都是基于HTTP协议的。


I’m 「软件老王」,如果觉得还可以的话,关注下呗,后续更新秒知!欢迎讨论区、同名公众号留言交流!