自己建网站能赚钱吗,东莞常平天气预报15天查询,网络服务提供者接到权利人的通知后,菏泽网站建设方案互联网中#xff0c;主流的是 TCP/IP 五层协议
5G/4G 上网#xff0c;是有自己的协议栈#xff0c;要比 TCP/IP 更复杂#xff08;能够把 TCP/IP 的一部分内容给包含进去了#xff09;
应用层
可以代表我们所编写的应用程序#xff0c;只要应用程序里面用到了网络通信…互联网中主流的是 TCP/IP 五层协议
5G/4G 上网是有自己的协议栈要比 TCP/IP 更复杂能够把 TCP/IP 的一部分内容给包含进去了
应用层
可以代表我们所编写的应用程序只要应用程序里面用到了网络通信就可以认为这个代码就是属于应用层的代码
日常开发中最常用到的一层
使用大佬们已经创建好的应用层协议 应用层知名的协议有很多其中的佼佼者就是 HTTP 自己定义应用层协议 另外四层都是操作系统/硬件/驱动已经实现好了的我们不可能“自定义”只能使用人家的
协议就是约定
按照自己的规则约定通讯方式——自定义应用层协议
自定义应用层协议
自定义应用层协议具体要做什么事情
明确要传递的信息
明确前后端交货过程中要传递哪些信息 举个例子开发一个外卖软件打开软件后首先需要展示一个“商家列表” 此处就需要先确定传递的信息是什么 请求用户是谁用户的 ID用户所处的位置响应商家列表包含多个商家每个商家信息中又有商家的名字、图片、距离、评分 这里的信息如何确定都是根据当前的需求来产生的 明确组织信息的格式
明确组织这些信息的格式 针对信息组织格式也有很多种方式使用哪种方方式都可以只要确定前段和后端是同一种方式就可以了 举个例子使用行文本的方式来组织上述数据 请求用户id,用户位置\n响应商家的id,商家名称,商家的图片地址,商家的距离,商家的评分\n 关于组织数据的格式还有一些说法上述“行文本”简单粗暴的方案在实际开发中很少会这样做 XML 方案
Maven 中就会见到通过“成对的标签”表示“键值对”信息
requestuserid1001/useridpostionE45N60/postion
/request可以通过 XML 来传输网络数据也可以作为程序的配置文件不过 XML 进行网络传输的时候又有一个明显的缺点——会消耗大量的带宽 网络通信中带宽是一个非常贵的硬件设备在传输标签的时候都得传输成对的标签传入的信息更多 所以现在 XMl 一般都是在配置文件不进行网络传输了XMl 里面的标签键值对都是程序员固定的而 HTMl 里面的标签都是固定的已经有一套标准约定好哪些标签是合法标签这些标签都是什么含义
JSON 方案
当前主流的网络通信的数据格式相比 xml 来说可读性是很好的同时能节省一定的带宽
{userid:1001,postion:E45N60
}JSON 也是“键值对”格式 键和值之间用 : 分割键值对之间用 , 分割所有的键值对都使用 {} 括起来 这里的标签都只有一份不需要结束标签了节省了传递开销
YMLYAML方案
强制要求了数据组织的格式强制要求写成“可读性非常高”的格式
键值对必须独占一行“嵌套”结构必须通过缩进来表示
protobuffer方案
前三个方案都是关注可读性而 protobuffer 关注性能牺牲了可读性通过二进制的方式组织数据
protobuffer 直接通过“位置”约定字段的含义不需要传输 key 的名字也会针对传输的数值进行二进制的编码起到一些“压缩”的效果极大地缩减了要传输的数据的体积——带宽消耗就越小——效率越高但二进制数据无法肉眼阅读调试相关程序的时候就会比较麻烦
常见端口号
端口号是一个整数用来区分不同的进程。
同一时刻同一个机器上同一个协议一个端口号只能被一个进绑定一个进程可以绑定多个端口号端口号是通过两个字节的无符号整数表示的取值范围 0~65535但实际上 0 比较特殊一般不会使用 1~1023 属于已经被预定好的有一些知名的服务器已经提前预定了这个端口这样的端口称为“知名端口号”其实里面的大部分服务器已经不再使用了在 80、90 年代是知名的我们日常开发的时候会避开这些端口 业务端口和管理端口
什么时候会涉及到一个进程服务器绑定多个端口
编写服务器肯定需要先绑定至少一个端口号和客户端进行交互称为“业务端口”服务器运行过程中希望能够对这个服务器的行为进行一些“控制” 比如让服务器重新加载某个数据/某个配置/修改服务器的某个功能也可以通过网络通信完成上述功能就可以让服务器绑定另一个端口通过这个端口编写一个客户端给服务器发送一些“控制类“请求上面的“另一个端口”就是“管理端口“
调试端口
当需要针对服务器运行状态进行检测和调试需要查看服务器运行中某个关键变量的数值的时候千万不能用调试器来进行调试一旦使用调试器调试这个服务就会使服务器的一些线程被阻塞住无法给客户端正确提供服务了
虽然可以通过日志进行打印但是不方便需要修改代码并重启服务器可以让服务器绑定另一个端口然后实现一些相关的打印关键变量的逻辑客户端发送对应的调试请求这里的“另一个端口”就是“调试端口”