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 「软件老王」,如果觉得还可以的话,关注下呗,后续更新秒知!欢迎讨论区、同名公众号留言交流!

socket-遇到一枚假程序员的更多相关文章

  1. Java 程序员必备的 15 个框架,前 3 个地位无可动摇!

    Java 程序员方向太多,且不说移动开发.大数据.区块链.人工智能这些,大部分 Java 程序员都是 Java Web/后端开发.那作为一名 Java Web 开发程序员必须需要熟悉哪些框架呢? 今天 ...

  2. 漫谈程序员系列:3D打印能打印出程序员吗

    首先声明,本文是一本正经的胡扯,绝不是随随便便的胡扯,请您不要随便攻击我胡说八道.我要反复星爷在<喜剧之王>里的台词:事实上.我是一本正经的喷子. 3D打印的定义 关于3D打印,以下是来自 ...

  3. 程序员必备字体Source Code Pro

    最近捕获一枚,程序员专用字体,很不错. 介绍如下: Source Code Pro 是由大名鼎鼎的 Adobe 公司发布的一款开源免费的等宽编程字体,它非常适合用于显示代码,支持 Linux.Mac ...

  4. 优秀Java程序员的四大忌,你避免了吗?

    做为一名优秀的程序员需要具备永不放弃的精神,如果一个程序员不具备这种永不放弃的精神,那么这个程序员只能算是一名假程序员.而通往成功的道路上往往是不平坦的,想要成为一个合格的高级Java程序员,需要规避 ...

  5. Java程序员拥有这些工具,还怕干不出好活

    老话说,工欲善其事,必先利其器. 那么,作为编程人员,你都用过哪些“兵器”呢?你的”兵器“够”锋利”吗? 近期,有很多新朋友问,都有什么画流程图的工具,给推荐推荐? 索性,就静下来,好好梳理一下,从事 ...

  6. 作为一枚第二天上班的小小.net程序员(技术宅的那种)很迷茫哦,第一个随笔

    作为一枚第二天上班的小小.net程序员(技术宅的那种)很迷茫哦,第一个随笔

  7. Github上安卓榜排名第2的程序员教你如何学习【转载,侵删】

    来自:峰瑞资本(微信号:freesvc)文章作者:代码家(微信 ID:daimajia_share) 软件早已吞噬整个世界,程序员是关键角色.过去 40 年中,许多伟大的公司都由程序员缔造,比如比尔· ...

  8. Socket编程指南及示例程序

    例子代码就在我的博客中,包括六个UDP和TCP发送接受的cpp文件,一个基于MFC的局域网聊天小工具工程,和此小工具的所有运行时库.资源和执行程序.代码的压缩包位置是http://www.blogja ...

  9. Android程序员必知必会的网络通信传输层协议——UDP和TCP

    1.点评 互联网发展至今已经高度发达,而对于互联网应用(尤其即时通讯技术这一块)的开发者来说,网络编程是基础中的基础,只有更好地理解相关基础知识,对于应用层的开发才能做到游刃有余. 对于Android ...

随机推荐

  1. MySql的数据库优化到底优啥了都??(2)

    嘟嘟在写此篇文章之前心里先默念(简单,通俗,工整)*10 吟唱完了,进入正题 3.Memory存储引擎 除了存放一个表结构相关信息的.frm文件在磁盘上,其他数据都存储在内存中.说白点哪天你数据库死机 ...

  2. C#3.0新增功能09 LINQ 基础01 语言集成查询

    连载目录    [已更新最新开发文章,点击查看详细] 语言集成查询 (LINQ) 是一系列直接将查询功能集成到 C# 语言的技术统称. 数据查询历来都表示为简单的字符串,没有编译时类型检查或 Inte ...

  3. Linux 安装MySql——ubuntu版

    这里简单地阐述一下rpm.deb.tar.gz的区别. rpm格式的软件包适用于基于Red Hat发行版的系统,如Red Hat Linux.SUSE.Fedora. deb格式的软件包则是适用于基于 ...

  4. hdu第十场Cyclic

    本题主要是对用容斥的使用,正难则反,对于要求满足题意的可以求不满足题意的 先考虑对于长度至少为2的连续序列,易得其排列C(n,1)*(n-2)!,意为从剩下n个数字中选取连续的两个. 方法总计为n,即 ...

  5. UltraEdit不自动生成保存备份文件(.bak)

    UltraEdit修改文件或格式化文件保存后会生成烦人的.bak文件. 去掉该功能办法如下: 高级 -> 配置 -> 文件处理 -> 备份 “保存时备份文件”选择“不备份” (Adv ...

  6. Ubuntu下Mongo的安装和笔记

    在linux下的安装 打开https://www.mongodb.com/download-center#community选择linux然后选择自己的Version复制DOWNLOAD旁边的链接 打 ...

  7. Django安装 测试、导入项目以及运行开发服务器

    安装Django  下载Django包,解压缩. CMD 进入解压路径下. 执行:python setup.py install 增加环境变量: C:\Python27\Scripts 测试djang ...

  8. 【MySQL】服务无法启动(Mac)

    如图所示: 点击 Start MySQL Server 没反应-- 终端输入 mysql 命令时报错如下: ERROR 2002 (HY000): Can't connect to local MyS ...

  9. Core CLR Host 源码简单分析

    在定制 CLR Host的时候,可以通过调用如下代码,来获取当前需要被宿主的程序调用入口: hr = Host->CreateDelegate( domainId, L"Main,Ve ...

  10. Java几种常见的排序算法

    一.所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作.排序算法,就是如何使得记录按照要求排列的方法.排序算法在很多领域得到相当地重视,尤其是在大量数据的处理方面. ...