知名网站开发哪里有运营一款app的费用

news/2025/9/30 1:10:52/文章来源:
知名网站开发哪里有,运营一款app的费用,淘宝运营培训视频,免费的网站软件下载安装TCP是一个有状态通讯协议#xff0c;所谓的有状态是指通信过程中通信的双方各自维护连接的状态。一、TCP keepalive先简单回顾一下TCP连接建立和断开的整个过程。(这里主要考虑主流程#xff0c;关于丢包、拥塞、窗口、失败重试等情况后面详细讨论。)首先是客户端发送syn(Syn…TCP是一个有状态通讯协议所谓的有状态是指通信过程中通信的双方各自维护连接的状态。一、TCP keepalive先简单回顾一下TCP连接建立和断开的整个过程。(这里主要考虑主流程关于丢包、拥塞、窗口、失败重试等情况后面详细讨论。)首先是客户端发送syn(Synchronize Sequence Numbers同步序列编号)包给服务端告诉服务端我要连接你syn包里面主要携带了客户端的seq序列号服务端回发一个synack其中syn包和客户端原理类似只不过携带的是服务端的seq序列号ack包则是确认客户端允许连接最后客户端再次发送一个ack确认接收到服务端的syn包。这样客户端和服务端就可以建立连接了。整个流程称为三次握手。建立连接后客户端或者服务端便可以通过已建立的socket连接发送数据对端接收数据后便可以通过ack确认已经收到数据。数据交换完毕后通常是客户端便可以发送FIN包告诉另一端我要断开了另一端先通过ack确认收到FIN包然后发送FIN包告诉客户端我也关闭了最后客户端回应ack确认连接终止。整个流程成为四次挥手。TCP的性能经常为大家所诟病除了TCPIP额外的header以外它建立连接需要三次握手关闭连接需要四次挥手。如果只是发送很少的数据那么传输的有效数据是非常少的。是不是建立一次连接后续可以继续复用呢的确可以这样做但这又带来另一个问题如果连接一直不释放端口被占满了咋办。为此引入了今天讨论的第一个话题TCP keepalive。所谓的TCP keepalive是指TCP连接建立后会通过keepalive的方式一直保持不会在数据传输完成后立刻中断而是通过keepalive机制检测连接状态。Linux控制keepalive有三个参数保活时间net.ipv4.tcp_keepalive_time、保活时间间隔net.ipv4.tcp_keepalive_intvl、保活探测次数net.ipv4.tcp_keepalive_probes默认值分别是 7200 秒(2 小时)、75 秒和 9 次探测。如果使用 TCP 自身的 keep-Alive 机制在 Linux 系统中最少需要经过 2 小时 9*75 秒后断开。譬如我们SSH登录一台服务器后可以看到这个TCP的keepalive时间是2个小时并且会在2个小时后发送探测包确认对端是否处于连接状态。之所以会讨论TCP的keepalive是因为发现服器上有泄露的TCP连接# ll /proc/11516/fd/10lrwx------ 1 root root 64 Jan 3 19:04 /proc/11516/fd/10 - socket:[1241854730]# dateSun Jan 5 17:39:51 CST 2020已经建立连接两天但是对方已经断开了(非正常断开)。由于使用了比较老的go(1.9之前版本有问题)导致连接没有释放。解决这类问题可以借助TCP的keepalive机制。新版go语言支持在建立连接的时候设置keepalive时间。首先查看网络包中建立TCP连接的DialContext方法中if tc, ok : c.(*TCPConn); ok d.KeepAlive 0 {setKeepAlive(tc.fd, true)ka : d.KeepAliveif d.KeepAlive 0 {ka defaultTCPKeepAlive}setKeepAlivePeriod(tc.fd, ka)testHookSetKeepAlive(ka)}其中defaultTCPKeepAlive是15s。如果是HTTP连接使用默认client那么它会将keepalive时间设置成30s。var DefaultTransport RoundTripper Transport{Proxy: ProxyFromEnvironment,DialContext: (net.Dialer{Timeout: 30 * time.Second,KeepAlive: 30 * time.Second,DualStack: true,}).DialContext,ForceAttemptHTTP2: true,MaxIdleConns: 100,IdleConnTimeout: 90 * time.Second,TLSHandshakeTimeout: 10 * time.Second,ExpectContinueTimeout: 1 * time.Second,}下面通过一个简单的demo测试一下代码如下func main() {wg : sync.WaitGroup{}c : http.DefaultClientfor i : 0; i 2; i {wg.Add(1)go func() {defer wg.Done()for {r, err : c.Get(http://10.143.135.95:8080)if err ! nil {fmt.Println(err)return}_, err ioutil.ReadAll(r.Body)r.Body.Close()if err ! nil {fmt.Println(err)return}time.Sleep(30 * time.Millisecond)}}()}wg.Wait()}执行程序后可以查看连接。初始设置keepalive为30s。然后不断递减至0后又会重新获取30s。整个过程可以通过tcpdump抓包获取。# tcpdump -i bond0 port 35832 -nvv -A其实很多应用并非是通过TCP的keepalive机制探活的因为默认的两个多小时检查时间对于很多实时系统是完全没法满足的通常的做法是通过应用层的定时监测如PING-PONG机制(就像打乒乓球一来一回)应用层每隔一段时间发送心跳包如websocket的ping-pong。二、TCP Time_wait第二个希望和大家分享的话题是TCP的Time_wait状态。、为啥需要time_wait状态呢为啥不直接进入closed状态呢直接进入closed状态能更快地释放资源给新的连接使用了而不是还需要等待2MSL(Linux默认)时间。有两个原因一是为了防止“迷路的数据包”如下图所示如果在第一个连接里第三个数据包由于底层网络故障延迟送达。等待新的连接建立后这个迟到的数据包才到达那么将会导致接收数据紊乱。第二个原因则更加简单如果因为最后一个ack丢失那么对方将一直处于last ack状态如果此时重新发起新的连接对方将返回RST包拒绝请求将会导致无法建立新连接。为此设计了time_wait状态。在高并发情况下如果能将time_wait的TCP复用time_wait复用是指可以将处于time_wait状态的连接重复利用起来。从time_wait转化为established继续复用。Linux内核通过net.ipv4.tcp_tw_reuse参数控制是否开启time_wait状态复用。读者可能很好奇之前不是说time_wait设计之初是为了解决上面两个问题的吗如果直接复用不是反而会导致上面两个问题出现吗这里先介绍Linux默认开启的一个TCP时间戳策略net.ipv4.tcp_timestamps 1。时间戳开启后针对第一个迷路数据包的问题由于晚到数据包的时间戳过早会被直接丢弃不会导致新连接数据包紊乱针对第二个问题开启reuse后当对方处于last-ack状态时发送syn包会返回FIN,ACK包然后客户端发送RST让服务端关闭请求从而客户端可以再次发送syn建立新的连接。最后还需要提醒读者的是Linux 4.1内核版本之前除了tcp_tw_reuse以外还有一个参数tcp_tw_recycle这个参数就是强制回收time_wait状态的连接它会导致NAT环境丢包所以不建议开启。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/922385.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

US$16 Yanhua BMW F/G Chassis Odometer Wiring Harness

Yanhua BMW F/G Chassis Odometer Wiring HarnessGood helper of resetting odometer.Function: Use BMW F/G chassis odometer wiring harness connects the odometer and power the wiring harness. Press the wake…

List-To-Table

List-To-Table导航 (返回顶部)1. List 2. List.txt-List.xlsx2.1 添加软件ID[Sid] 2.2 构造2维表格结构(包含第一列和第一行的字段的空表) 2.3 获取具体信息(填充表格信息)3. XLOOKUP3.1 语法及返回 3.2 参数 3.3 测试…

linux 添加唤醒词

在RK3588 Ubuntu主板上实现FunASR离线语音唤醒系统 RK3588是一款性能强大的SoC,搭配FunASR可以很好地实现离线语音唤醒功能。以下是完整的实施方案: 1. 硬件准备 音频输入设备选择 由于您的主板针脚图未显示专用音频…

US$980 Xhorse VVDI2 BMW OBD + CAS4 +FEM/BDC Functions Full BMW License

Xhorse VVDI2 BMW OBD + CAS4 +FEM/BDC Functions Full BMW LicenseLicense Includes:VB-01 BMW OBDVB-02 BMW CAS4VB-03 BMW FEM/BDCIf you buy VVDI2 Basic or VVDI2 VAG and need to get VVDI2 BMW functions for B…

学网站开发可以创业吗聊天网站模板

MySQLMySQL 是最流行的关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的 RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之一YUM 安装mysql1、下载 YUM 仓库文件打开网址: https://dev.mysql.com/downloads/…

做电销有什么资料网站深圳宝安区是什么风险

首先,我们通过一张图片来了解一下Oracle数据库的内存结构,如下:每个数据库实例有两个关联的内存结构—系统全局区(SGA),程序全局区(PGA)。系统全局(SGA):一组共享的内存结构(称为SGA 组件),其中包含一个OracleDB 实例的…

建立自己的网站费用广告运营具体是做什么

案例:给"ls -l"命令,设置别名通过”ll“快速访问 1、在项目根目录底下查看有无.bash_profile文件,注意这个是个隐藏文件,需要使用ls -a命令查看: 没有.bash_profile新建一个文件, 在最后添加一行…

做软件外包的网站怎么查看小程序的开发公司

maven-antrun-plugin允许我们在各种maven构建阶段中运行ant目标。 我将专门为具有开发环境的开发人员解释maven-antrun-plugin的非常实际的用法。 通常,使用maven build,您会将项目捆绑到war文件或ear文件中。 您可以使用maven-antrun-plugin直接将此w…

【python】1.基础入门

官网安装可能会有下载较慢的问题 win安装记得勾选 “添加到path”终端运行pythonMAC注意:输入python3,否则不识别 写一行python代码并执行:python3回车后执行注:mac按control+D或者输入exit() -- 退出python代码运…

测速网站开发下沙网站建设

修改version https://developers.weixin.qq.com/miniprogram/dev/framework/plugin/using.html

深圳公司贷款天津网络优化招聘

QT学习笔记(一):VS2013 QT 5.8 运行、编译问题解决 jom: E:\C\4.QT\HelloWord\Makefile.Debug [debug\moc_predefs.h] Error 1 ‘cl’ 不是内部或外部命令,也不是可运行的程序 或批处理文件。 jom: E:\C\4.QT\HelloWord\Makefile…

山东省住房和城乡建设厅网站教育中心wordpress商城主题哪个好

文章目录 基本用法失效的多态数组就是数组使用限制作用于空class作用于引用基本用法 sizeof运算符用于查询对象或类型的大小。它在编译时计算,并返回以字节为单位的对象或类型的大小。 在某些情况下,我们需要知道对象的实际大小。例如,当我们分配内存或操作具有特定大小要…

中国营销网站启信聚客通网络营销策划

目录 一、朴素贝叶斯分类理论 1、贝叶斯分类理论 2、条件概率 3、全概率公式 4、贝叶斯推断 5、朴素贝叶斯推断 6、拉普拉斯平滑系数 二、决策树分类 1、相关概念 2、基于信息增益决策树的建立 3、基于基尼指数决策树的建立 一、朴素贝叶斯分类理论 1、贝叶斯分类理…

网站在正在建设中崇义县网站建设

JMS规范 一、JMS是什么二、MQ中间件对比三、JMS组成1.JMS Provider2.JMS Producer3.JMS Consumer4.JSM Message4.1 消息头4.2 消息体4.2.1 生产者4.2.2 消费者 4.3 消息属性 四、JMS可靠性1.PERSISTENT - 持久化1.1 参数设置1.2 Queue持久化1.3 Topic持久化1.3.1 持久的发布主题…

免费发布推广信息网站asp.net网站开发菜鸟

一.新建工程模板(基于固件库) 1.1库函数与寄存器的区别 这里的启动文件都是根据容量来进行区分的 对MDK而言即使include了,也不知道在哪里找头文件 STM32F10X_HD,USE_STDPERIPH_DRIVER 二.新建工程模板(基于寄存器) 上面的大部分配置与固件库的一样 具体可以看手…

简单的视频网站能不能用dw做北京企业建站程序

目录 环境描述 分析过程 1.SD卡格式化 2.使用winhex打开sd卡 3.MBR分析 4.DBR分析

广州响应式网站建设南京网站开发南京乐识权威

前言 上一篇:从领域驱动到模型驱动中我们讨论到,领域驱动设计的核心思想是保持业务-模型-代码的一致性,模型作为沟通业务和代码的工具,至关重要,今天这篇文章就来讨论DDD中建模的一些思考和方法。 什么是建模 虽然看…

天津网站建设公司推荐学电脑哪家好

性能优化是一个很有趣的探索方向,将耗时耗资源的查询优化下来也是一件很有成就感的事情,但既然编程是一种沟通手段,那每一个数据开发者就都有义务保证写出的代码逻辑清晰,具有很好的可读性。 目录 引子 小试牛刀 答案 引言 …

网站建设案例怎么样做淘宝客网站服务器

目录 1.网络编程 2.Echo模型(服务器与客户端实现通信) 3.BIO处理模型(实现多用户访问同个服务器) 4.UDP程序 1.网络编程 有两种通信模型 C/S(Client/Server)基于客户端和服务器端,实现代码时候需要实现客户端与服务器端 B/S(Browser/S…

大二学计算机系统基础

大二学计算机系统基础平台:IA-64 + linux + C + gcc在 linux 系统中:gdb 在 Macintosh OS 上:lldb编译器:以机器码为目标 操作系统:管理进程状态x86-64(又称 x64、AMD64) x86 架构的 64 位扩展 指令集的 64位版…