4.tcp问题及进程

1 tcp 问题

a,粘包
b,拆包

解决:


1.1 解决方案-1-粘包-特殊字符方式

a. 当时短连接的情况下,不用考虑粘包的情况 
b. 如果发送数据无结构,如文件传输,这样发送方只管发送,接收方只管接收存储就ok,也不用考虑粘包 
c. 如果双方建立长连接,需要在连接后一段时间内发送不同结构数据 接收方创建预处理线程,对接收到的数据包
进行预处理,将粘连的包分开;

 

1.2 swoole的解决方式:


swoole的解决办法就是通过EOF的方式处理;在swoole中提供了一个open_eof_split的选项: 
http://wiki.swoole.com./wiki/page/421.html

 

1.3 解决方案-统-1-粘包-一标准(固定包头+包体协议)


对于这样的问题情况,实际上我们可以通过定义好发送消息的tcp数据包的格式,而这个对于服务端和客户端相互
之间就遵守这个规范

这种方式就是通过与在数据传输之后会在tcp的数据包中携带上数据的长度,然后呢服务端就可以根据这个长度,
对于数据进行截取;

对于pack的解释 -》https://php.golaravel.com/function.pack.html
对于unpack的解释 -》https://php.golaravel.com/function.unpack.html

须知:一个字节 = 8个二进制位

 

相关配置:


open_length_check: 打开包长检测特性 
package_length_type: 长度字段的类型,固定包头中用一个4字节或2字节表示包体长度。 
package_length_offset:从第几个字节开始是长度,比如包头长度为120字节,第10个字节为长度值,这里
填入9(从0开始计数)
package_body_offset: 从第几个字节开始计算长度,比如包头为长度为120字节,第10个字节为长度值,包
体长度为1000。如果长度包含包头,这里填入0,如果不包含包头,这里填入120 
package_max_length: 最大允许的包长度。因为在一个请求包完整接收前,需要将所有数据保存在内存中,
所以需要做保护。避免内存占用过大。

package_length_type 的参考 https://segmentfault.com/a/1190000008305573

 

2. 进程-线程

 

2.1 进程


专业:

进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本
单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当 代面向
线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。

实际:

什么是进程,所谓进程其实就是操作系统中一个正在运行的程序,我们在一个终端当中,通过php,运行一
个php文件,这个时候就相当于我们创建了一个进程,这个进程会在系统中驻存,申请属于它自己的内 存空间系统
资源并且运行相应的程序

组成:

进程是一个实体。每一个进程都有它自己的地址空间,一般情况下,包括文本区域(text region)、数据
区域(data region)和堆栈(stack region)。文本区域存储处理器执行的代码;数据区域存储变量和进程 执
行期间使用的动态分配的内存;堆栈区域存储着活动过程调用的指令和本地变量。

 

特征


动态性:进程的实质是程序在多道程序系统中的一次执行过程,进程是动态产生,动态消亡的。 
并发性:任何进程都可以同其他进程一起并发执行 独立性:进程是一个能独立运行的基本单位,同时也是系统分
配资源和调度的独立单位; 
异步性:由于进程间的相互制约,使进程具有执行的间断性,即进程按各自独立的、不可预知的速度向前推进 结
构特征:进程由程序、数据和进程控制块三部分组成。 多个不同的进程可以包含相同的程序:一个程序在不同的
数据集里就构成不同的进程,能得到不同的结果;但是执行过程中,程序不能发生改变。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值