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. 【区分】Typescript 中 interface 和 type

    在接触 ts 相关代码的过程中,总能看到 interface 和 type 的身影.只记得,曾经遇到 type 时不懂查阅过,记得他们很像,相同的功能用哪一个都可以实现.但最近总看到他们,就想深入的了 ...

  2. Sublime Text 格式化代码

    1.添加快捷键 其实在sublime中已经自建了格式化按钮: Edit -> Line -> Reindent 只是sublime并没有给他赋予快捷键,所以只需加上快捷键即可 Prefer ...

  3. TestNG中DataProvider的用法一

    目录 为什么要使用DataProvider DataProvider的常规用法 带Method参数的DataProvider 带ITestContext的DataProvider DataProvid ...

  4. 洛谷 P3387 题解

    题面 裸跑一遍SPFA,统计每个点的入队次数: 如果该点的入队次数>=总点数,那么该点便是一个负环上的点: 重点!!!: 1.不是“YES”,是“YE5”: 2.不是“NO”,是“N0”:(是零 ...

  5. 【Android Studio】Gradle DSL method not found:'android()'

    如图所示: 参考:http://www.jianshu.com/p/d370d41fb7da 又遇到了这个问题: 参考:http://stackoverflow.com/questions/24204 ...

  6. spring cloud eureka + feign,api远程调用

    网上教程不少,有些就是复制粘贴,不结合实际生产. eureka不再阐述. 一般正常开发会有多个工程,且多个module. 我的习惯是: eureka server.权限.config.gateway ...

  7. 关于ajax异步请求的一个细节问题

    首先描述一下问题场景:我们正在做一个汽车出租项目,使用maven+ssm+easyui来完成,这个问题是在做汽车办理出租业务的时候出现的. 问题描述:在使用ajax发送异步请求时,遇到一个问题,就是在 ...

  8. EnjoyingSoft之Mule ESB开发教程第六篇:Data Transform - 数据转换

    目录 1. 数据转换概念 2. 数据智能感知 - DataSense 3. 简单数据转换组件 3.1 Object to JSON 3.2 JSON to XML 3.3 JSON to Object ...

  9. Xamarin Android 监听音量键(下)

    上篇在 MainActivity 中重写了按键事件(OnKeyDown),获取了音量键键值并打印了出来,当然,手机物理按键和虚拟按键(音量键.返回键.菜单键等)均可通过该按键事件被捕获. 但是,按键重 ...

  10. IPC机制1

    1.Android IPC简介 Inter-Process Communication的缩写就是IPC,含义是进程间通信或是跨进程间通信,是指两个进程进行交换数据的过程. 进程是什么? 进程在pc上就 ...