长连接

[原创] Nginx1.13版本reload过程对TCP包影响的测试

天大地大妈咪最大 提交于 2019-11-28 22:32:50
Nginx1.13版本reload过程中各项连接情况和状态的测试。测试Nginx1.13 Reload过程中,对客户端和服务器的TCP层面的包影响。 1)对客户端开启长连接,服务端开启/不开启长连接情况下 测试方法:浏览器发起http自带connection:keep-alive,服务端分别在开启和不开启长连接的情况下,然后在重新打开浏览器访问,连续访问5次,期间会reload nginx。整个过程对81和8010端口抓包。 2)对TCP长连接代理的情况下 测试方法:连接82端口,发送tcp,再发送tcp1,断开连接。然后连接ws,发送tcp_reload,执行nginx reload,再发送tcp_reload1,断开连接。整个过程抓82和8012端口的包。 3)对Websocket保持连接的情况下 测试方法:连接ws,发送hello,再发送hello1,断开连接。然后连接ws,发送hello_reload,执行nginx reload,再发送hello_reload1,断开连接。整个过程抓81和8010端口的包。 如下所示,是测试的环境访问流程。三项测试都是用该环境。 ** 测试代码见文章末尾 1)对客户端开启长连接,服务端开启/不开启长连接情况下 1.1)环境的配置: Real server使用python的SimpleHTTPServer模块启动一个简单的web服务

MySQL实战

旧巷老猫 提交于 2019-11-28 17:29:15
也许,你也跟我一样,在遇到数据库问题时,总时茫然失措,想重启解决问题,又怕导致数据丢失,更怕重启失败,影响业务。 就算重启成功了,对于问题的原因仍不知所以。 本文开始,记录学习《MySQL实战45讲》专栏的过程。 也许有人会问,你记录有什么意义?直接看专栏不就行了吗?你这不是啃别人的剩骨头吗? 是的,这个系列,我只是基于专栏学习,但是我会尽量从我的角度搞懂每一个知识点,遇到不懂得也会将知识点进行拆分。 我知道关注公众号的小伙伴也有很多购买了这个专栏的,我希望大家都能够利用好这个机会,把 MySQL 吃透! 看大家的反馈情况吧,若有需要,可以建个小群,大家互相讨论学习! 下面开始正文。 大家或多或少都用过 MySQL,起码 select 还是会用的吧,但是 select 执行后,MySQL 内部到底发生了什么,你知道吗? 比如,我们有个简单的表 T,它有个 ID 字段,那么我们可以执行下面的语句: 1 mysql> select * from T where ID=10; 语句执行很简单,但是具体到 MySQL 内部,其实是一个完整的执行流程。 从下图就可以清楚地看出 MySQL 的命令执行流程: 从该图可以看出,MySQL 主要分为 server 层和存储引擎层。 server 层中包含连接器,查询缓存,分析器,优化器,执行器,大多数核心功能以及内置函数,存储过程,触发器,视图等。

前端随心记---------Ajax,Comet,Websocket

浪子不回头ぞ 提交于 2019-11-28 10:34:17
从WebScoket中我们了解到Ajax的轮询问题,WebScoket协议中服务器和客户端只要进行一次握手,就能创建一条通道实现数据的相互传送。而Ajax轮询,在特定的时间间隔内向服务器发送请求,以达到对数据的推送,这样导致浪费了很多无谓的网络带宽,因此产生疑问:为了达到高效且资源利用最大化的角度,WebScoket为什么没有淘汰定时轮询这种机制呢? 什么是Websocket   Websocket是HTML5中提出的新的 协议 ,注意,这里是协议,可以实现客户端与服务器端的通信,实现服务器的 推送 功能。    websocket出现之前,开发者使用轮询 (Polling) 和 Comet 技术。   轮询 :客户端以一定的时间间隔向服务端发出请求,以频繁请求的方式来保持客户端和服务器端的同步。   缺点:当客户端以固定频率向 服务器发起请求的时候,服务器端的数据可能并没有更新,这样会带来很多无谓的网络传输,所以这是一种非常低效的实时方案。   Comet--- 一种 hack 技术, :基于 HTTP 长连接的“服务器推”技术     以即时通信为代表的web应用程序对数据的Low Latency要求,传统的基于轮询的方式已经无法满足,而且也会带来不好的用户体验。于是一种基于http长连接的“服务器推”技术便被hack出来。这种技术被命名为 Comet ,这个术语由Dojo

计算机网络面试题3

倖福魔咒の 提交于 2019-11-28 08:30:32
面试中网络方面的知识被问到的概率很大,尤其是互联网公司,要熟悉osi七层模型,其中TCP/IP方面的知识尤其重要。如果自己平时有Socket编程的经验对面试也是很有帮助的。网络方面有空可以看看TCP/IP详解卷一和UNIX网络编程。以下总结了一些面试中常问的问题: 1、TCP为什么需要3次握手,4次断开? “三次握手”的目的是“为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误”。 client发出的第一个连接请求报文段并没有丢失,而是在某个网络结点长时间的滞留了,以致延误到连接释放以后的某个时间才到达server。本来这是一个早已失效的报文段。但server收到此失效的连接请求报文段后,就误认为是client再次发出的一个新的连接请求。于是就向client发出确认报文段,同意建立连接。假设不采用“三次握手”,那么只要server发出确认,新的连接就建立了。由于现在client并没有发出建立连接的请求,因此不会理睬server的确认,也不会向server发送数据。但server却以为新的运输连接已经建立,并一直等待client发来数据。这样,server的很多资源就白白浪费掉了。采用“三次握手”的办法可以防止上述现象发生。例如刚才那种情况,client不会向server的确认发出确认。server由于收不到确认,就知道client并没有要求建立连接。”

RocketMQ各组件介绍

三世轮回 提交于 2019-11-28 05:47:16
Rocket 架构主要分为4部分: Producer 消息发布者,支持分布式集群部署。Produer 通过 MQ 负载均衡模块选择相应 Broker 中的 queue 进行消息投递,投递过程支持快速失败并且低延迟 Consumer 消息消费的角色,支持分布式集群方式部署。支持以push推,pull拉两种模式对消息进行消费。同时也支持集群方式和广播方式的消费,它提供实时消息订阅机制,可以满足大多数用户的需求 Nameserver NameServer:NameServer是一个非常简单的Topic路由注册中心,其角色类似Dubbo中的zookeeper,支持Broker的动态注册与发现。主要包括两个功能:Broker管理,NameServer接受Broker集群的注册信息并且保存下来作为路由信息的基本数据。然后提供心跳检测机制,检查Broker是否还存活;路由信息管理,每个NameServer将保存关于Broker集群的整个路由信息和用于客户端查询的队列信息。然后Producer和Conumser通过NameServer就可以知道整个Broker集群的路由信息,从而进行消息的投递和消费。NameServer通常也是集群的方式部署,各实例间相互不进行信息通讯。Broker是向每一台NameServer注册自己的路由信息,所以每一个NameServer实例上面都保存一份完整的路由信息

计算机网络面试

好久不见. 提交于 2019-11-28 05:04:00
文章目录 OSI“实现”:TCP/IP TCP三次握手 为什么需要三次握手才能建立起连接 首次握手的隐患---SYN超时 建立连接后,客户端出现故障怎么办 TCP的四次挥手 为什么会有TIME_WAIT状态 为什么需要四次挥手才能断开连接 服务器出现大量CLOSE_WAIT状态的原因 TCP特点 UDP特点 TCP和UDP的区别 HTTP主要特点 请你说一下HTTP的报文段是什么样的?(请求报文和响应报文) GET方式和POST方式的区别 请你回答一下HTTP用的什么连接? HTTP请求/响应的步骤 在浏览器地址栏键入URL,按下回车之后经历的流程 HTTP和HTTPS的区别 HTTPS数据传输流程 区别 HTTPS真的很安全么 接口和端口的区别 IPv4与IPv6 OSI“实现”:TCP/IP OSI模型注重 通信协议必要的功能 是什么,而TCP/IP则更强调在计算机上 实现协议应该开发哪种程序 。 TCP三次握手 URG:紧急指针标志 ACK:确认序号标志 为1时表示确认号有效,为0表示报文中不含确认信息,忽略确认号字段,上面的确认号是否有效就是通过该标识位控制的 PSH:push标志 RST:重置连接标志 SYN:同步序号,用于建立连接过程 在连接请求中,SYN = 1 与 ACK = 0 表示该数据段没有使用捎带的确认阈,而连接应答捎带一个确认即 SYN = 1 ,ACK

mysql 连接数过多内存增长过快

橙三吉。 提交于 2019-11-28 02:49:32
mysql连接允许长连接和短链接,但是本身建立连接会有很大开销所以一般连接mysql会使用长连接。但是全部是使用长连接后,可能会出现mysql有时占用内存涨的特别快,这是因为mysql在执行过程中临时使用的内存是管理在连接对象里面的。这些资源会在连接断开的时候才释放。所以如果长连接累计下来,可能导致内存占用太大,被系统强制kill(OOM),从现象看mysql异常重启了。 怎么解决这个问题呢?有一下两种方案 1、定期断开长连接。使用一段时间或者程序判断在执行一个占用内存的大查询后断开连接,之后查询再从新连接 2、在mysql 5.7或者更新版本,可以在每次执行一个比较大的操作后执行 mysql_reset_connection 来重新初始化连接资源。这个过程不需要重连和重新做权限验证,但是会将连接恢复到刚刚创建完时的状态 来源: https://www.cnblogs.com/tonyauto/p/11386927.html

HSF的原理分析

百般思念 提交于 2019-11-28 00:07:53
一.HSF的基本概念 HSF全称为High-Speed Service Framework,旨在为淘系的应用提供一个分布式的服务框架,HSF从分布式应用层面以及统一的发布/调用方式层面为大家提供支持,从而可以很容易的开发分布式的应用以及提供或使用公用功能模块,而不用考虑分布式领域中的各种细节技术,例如远程通讯、性能损耗、调用的透明化、同步/异步调用方式的实现等等问题。 二.知识准备 通过以上的说明,大致了解了一下RPC与HSF的总体架构,但是总体架构离具体实现还想差很多,有些知识准备还是很有必要的。 1.对象的序列化 对象的序列化过程在RPC过程中是很重要的一个环节,序列化对于远程调用的响应速度、吞吐量、网络带宽消耗等同样也起着至关重要的作用。在HSF1.0时只支持两种序列化方式:java 和 hessian,在HSF2.0之后就支持了五种序列化方式:java、hessian、hessian2、json、kyro。但是目前版本中常用的序列化方式还是java 和 hessian两种。如果想细致的了解也可以多做了解。 2.动态代理 对于消费方来说,所存在的只有一个接口,虽然底层的实现原理我们知道,但是为了在使用时的高度透明,在JAVA语言层面上的表现形式则是通过动态代理的方式实现的,很多的逻辑都在InvocationHandler 中处理的。关于如何实现动态代理

慎用Java 自带两种线程池!

故事扮演 提交于 2019-11-27 20:31:10
Java5相比之前的Java版本,在并发编程上,有了非常大的提高,加了很多类,提供了很多可用于并发编程的工具包和工具类。尤其为人们所称道的,就是Java自带的线程池。 Java5线程池的介绍文章,可以说在网上比比皆是,我就不再重复了,只是简单提一下,线程池给并发程序带 来了几个好处: 1、 创建和销毁线程的开销 2、保护系统资源,避免创建太多的线程导致系统崩溃 3、简化编程模型 Java5自带的线程池( ThreadPool),用于并发系统的,主要有: 缓存线程池(newCachedThreadPool): 每个任务过来后都会创建一个线程,任务结束后,线程缓存一段时间,下次任务过来后,如果有之前缓存的线程就无须再创建而是直接使用。 固定数量线程池(newFixedThreadPool): 创建固定线程数量的线程池,如果任务数大于线程池中线程的数量,那么任务将等待。 其实,我们看Java的源代码,就会发现,上面两种线程池,都是调用Java的ThreadPoolExecutor来实现的。其构造函数如下: ThreadPoolExecutor (int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue < Runnable > workQueue) 我们可以看到

JAVA SOCKET 详解

百般思念 提交于 2019-11-27 16:19:29
概述 本人在开发学习NETTY的过程中,需要了解很多的网络开发知识,在此我总结一些关于socket的基础知识,大部分是网络总结,在此篇的随笔中记录socket的知识,以便于记录,如有问题欢迎大家斧正。 SOCKET通信基本原理 首先socket通常也叫做“套接字”,用于描述IP地址和端口,是一个通信连的句柄。应用程序通常通过“套接字”向网络发出请求或者应答网络请求。 socket通信是基于TCP/IP网络层上的一种传输方式,我们通常把TCP和UDP 称为传输层。 如上图所示,在七个层级关系中,我们将socket层属于传输层,其中UDP是一种面向无连接的传输层协议。UDP不关系对端是否真正收到了数据,如果需要检查需要在应用程序中实现。这里不详细讨论。 简而言之,socket是基于应用服务和TCP/IP通信之间的一个抽象,他将TCP/IP协议里面复杂的通信逻辑进行封装,对用户来说只要通过一组简单的API就可以实现网络的连接,借用网络上一组socket通信图给大家进行讲解一下: 首先,服务端初始化ServerSocket,然后对指定的端口进行绑定,接着对端口及进行监听,通过调用accept方法阻塞,此时,如果客户端有一个socket连接到服务端,那么服务端通过监听和accept方法可以与客户端进行连接。 SOCKET通信基本示例 在对socket通信基本原理明白后