handler

高性能Server---Reactor模型

浪子不回头ぞ 提交于 2020-03-08 18:16:43
无处不在的C/S架构 在这个充斥着云的时代,我们使用的软件可以说99%都是C/S架构的! 你发邮件用的Outlook,Foxmail等 你看视频用的优酷,土豆等 你写文档用的Office365,googleDoc,Evernote等 你浏览网页用的IE,Chrome等(B/S是特殊的C/S) …… C/S架构的软件带来的一个明显的好处就是:只要有网络,你可以在任何地方干同一件事。 例如:你在家里使用Office365编写了文档。到了公司,只要打开编辑地址就可以看到在家里编写的文档,进行展示或者继续编辑。甚至在手机上进行阅读与编辑。不再需要U盘拷来拷去了。 C/S架构可以抽象为如下模型: C就是Client(客户端),上面的B是Browser(浏览器) S就是Server(服务器): 服务器管理某种资源,并且通过操作这种资源来为它的客户端提供某种服务 C/S架构之所以能够流行的一个主要原因就是网速的提高以及费用的降低,特别是无线网络速度的提高。试想在2G时代,大家最多就是看看文字网页,小说什么的。看图片,那简直就是奢侈!更别说看视频了! 网速的提高,使得越来越多的人使用网络,例如:优酷,微信都是上亿用户量,更别说天猫双11的瞬间访问量了!这就对服务器有很高的要求!能够快速处理海量的用户请求!那服务器如何能快速的处理用户的请求呢? 高性能服务器 高性能服务器至少要满足如下几个需求:

jQuery鼠标事件之focusin事件

南楼画角 提交于 2020-03-08 15:30:15
jQuery鼠标事件之focusin事件 当一个元素,或者其内部任何一个元素获得焦点的时候,例如:input元素,用户在点击聚焦的时候,如果开发者需要捕获这个动作的时候,jQuery提供了一个focusin事件 使用上非常简单: 方法一:$ele.focusin() 绑定$ele元素,不带任何参数一般是用来指定触发一个事件,一般用的比较少 <div id="test">点击触发<div> $("ele").focusin(function(){ alert('触发指定事件') }) $("#test").mouseup(function(){ $("ele").focusin() //指定触发事件 }); 方法二:$ele.focusin( handler ) 绑定$ele元素,每次$ele元素触发点击操作会执行回调 handler函数 这样可以针对事件的反馈做很多操作了 <div id="test">点击触发<div> $("#test").focusin(function() { //this指向 div元素 }); 方法三:$ele.focusin( [eventData ], handler ) 使用与方法二一致,不过可以接受一个数据参数,这样的处理是为了解决不同作用域下数据传递的问题 <div id="test">点击触发<div> $("#test").focusin

Code-C#-Delegate:委托(delegate)的三种调用方式:同步调用,异步调用,异步回调

。_饼干妹妹 提交于 2020-03-08 13:34:54
ylbtech-Code-C#-Delegate:委托(delegate)的三种调用方式:同步调用,异步调用,异步回调 1. 返回顶部 1、 下面为即将被调用的方法: public delegate int AddHandler(int a, int b); public class 加法类 { public static int Add(int a, int b) { Console.WriteLine("开始计算:" + a + "+" + b); Thread.Sleep(1000); Console.WriteLine("计算完成!"); return a + b; } } 同步调用 : class Program { static void Main() { Console.WriteLine("===== 同步调用 SyncInvokeTest ====="); AddHandler handler = new AddHandler(加法类.Add); int result = handler.Invoke(1, 2); Console.WriteLine("继续做别的事情。。。"); Console.WriteLine(result); Console.ReadKey(); } } invoke后阻塞主进程,直到handler执行完毕; ===== 同步调用

变动事件_DOM2级的变动事件(mutation)

﹥>﹥吖頭↗ 提交于 2020-03-08 09:16:41
DOM2级定义了如下变动事件: DOMSubtreeModified: 在DOM结构中发生任何变化时触发。这个事件在其他任何事件触发后都会触发。 DOMNodeInserted: 在一个节点作为子节点被插入到另一个节点中时触发 DOMNodeRemoved: 在节点从其父节点中被移除时触发 DOMNodeInsertIntoDocument: 在一个节点被直接插入文档或通过子树间接插入文档之后触发。这个事件在DOMNodeInserted之后触发 DOMNodeRemovedFromDocument: 在一个节点被直接从文档中移除或通过子树间接从文档中移除之前触发。这个事件在DOMNodeRemoved之后触发  DOMAttrModified:在特性被修改之后触发 DOMCharacterDataModified:在文本节点的值发生变化时触发。 使用下列代码可以检测出浏览器是否支持变动事件: var isSupported = document.implementation.hasFeature('MutationEvents','2.0');  IE8之前的版本不支持任何变动事件 由于DOM3级事件模块作废了很多变动事件 删除节点 在使用removeChild()和replaceChild()从DOM中删除节点时: 首先触发DOMNodeRemoved事件 这个事件的目标

输入子系统流程分析

核能气质少年 提交于 2020-03-08 05:33:27
一个驱动设备对应多个驱动程序 dev层负责写与硬件相关的驱动程序,中断函数,事件上报等;handler层负责构造file_operations结构体,创建handle。 Input层是中转层,接口层,dev层需要向input层注册input_dev,handler层需要向input层注册input_handler和input_handle,input层有很多功能函数,把dev层和handler层链接起来。 subsys_initcall ( input_init ) ; // input作为模块,安装该模块时会执行input_init static int __init input_init ( void ) err = class_register ( & input_class ) ; // 类创建—类名input err = input_proc_init ( ) ; // 在/proc下面建立相关的文件 err = register_chrdev ( INPUT_MAJOR , "input" , & input_fops ) ; // 注册字符设备proc/devices,主设备号13 // 该字符设备的file_operations 结构 static const struct file_operations input_fops = { . owner = THIS

cors跨域中关于access-control-allow-headers导致的错误

倖福魔咒の 提交于 2020-03-07 19:42:27
cors.png 1、详细错误信息是: Access to XMLHttpRequest at '[http://appservice.wogame-dev.com/h5/game/getCdkDetail](http://appservice.wogame-dev.com/h5/game/getCdkDetail)' from origin '[http://app.wogame-dev.com](http://app.wogame-dev.com)' has been blocked by CORS policy: Request header field wg-token is not allowed by Access-Control-Allow-Headers in preflight response. 抓包查看http请求和响应,发现已允许跨域。说明跨域设置是成功了,只是HTTP Header缺少了一个字段,导致的报错。 11_30_08__12_07_2018.jpg 2、这里贴出java源码: import org.apache.commons.lang.StringUtils; import org.springframework.beans.factory.annotation.Value; import org.springframework.context

elasticsearch transport 请求发送和处理

这一生的挚爱 提交于 2020-03-07 06:07:33
前一篇分析对nettytransport的启动及连接,本篇主要分析transport请求的发送和处理过程。cluster中各个节点之间需要相互发送很多信息,如master检测其它节点是否存在,node节点定期检测master节点是否存储,cluster状态的发布及搜索数据请求等等。为了保证信息传输,elasticsearch定义了一个19字节长度的信息头HEADER_SIZE = 2 + 4 + 8 + 1 + 4,以'E','S'开头,接着是4字节int信息长度,然后是8字节long型信息id,接着是一个字节的status,最后是4字节int型version。所有的节点间的信息都是以这19个字节开始。同时elasticsearch对于节点间的所有action都定义 了名字,如对master的周期检测action,internal:discovery/zen/fd/master_ping,每个action对应着相应的messagehandler。接下来会进行详分析。 首先看一下request的发送过程,代码在nettytransport中如下所示: public void sendRequest(final DiscoveryNode node, final long requestId, final String action, final TransportRequest

MySql的多存储引擎架构

六眼飞鱼酱① 提交于 2020-03-07 05:26:07
支持多种存储引擎是众所周知的MySQL特性,也是MySQL架构的关键优势之一。如果能够理解MySQL Server与存储引擎之间是怎样通过API交互的,将大大有利于理解MySQL的核心基础架构。本文将首先介绍MySQL的整体逻辑架构,然后分析MySQL的存储引擎API并介绍如何编写自己的MySQL存储引擎。 MySQL逻辑架构 MySQL作为一个大型的网络程序、数据管理系统,架构非常复杂。下图大致画出了其逻辑架构。 MySQL由以下几部分组成: 连接池组件。 管理服务和工具组件。 SQL接口组件。 查询分析器组件。 优化器组件。 缓冲(Cache)组件。 插件式存储引擎。 物理文件。 Connectors MySQL首先是一个网络程序,其在TCP之上定义了自己的应用层协议。所以要使用MySQL,我们可以编写代码,跟MySQL Server建立TCP连接,之后按照其定义好的协议进行交互。当然这样比较麻烦,比较方便的办法是调用SDK,比如Native C API、JDBC、PHP等各语言MySQL Connector,或者通过ODBC。但通过SDK来访问MySQL,本质上还是在TCP连接上通过MySQL协议跟MySQL进行交互。 Connection Management 每一个基于TCP的网络服务都需要管理客户端链接,MySQL也不例外。MySQL会为每一个连接绑定一个线程

mqtt协议-broker之moqutte源码研究六之集群

旧街凉风 提交于 2020-03-07 02:10:36
moquette的集群功能是通过Hazelcast来实现的,对Hazelcast不了解的同学可以自行Google以下。 在讲解moquette的集群功能之前需要讲解一下moquette的拦截器,因为moquette对Hazelcast的集成本身就是通过拦截器来实现的。 一。拦截器 io.moquette.spi.impl.ProtocolProcessor类里面有一个BrokerInterceptor类,这个类就是broker拦截器,这个对象,在processConnect,processPubAck,processPubComp,processDisconnect,processConnectionLost,processUnsubscribe,processSubscribe,processPublish等八个地方都用到了,说明在broker处理各个报文的关键期间都会用到,我们先看一这个类的结构 private static final Logger LOG = LoggerFactory.getLogger(BrokerInterceptor.class); private final Map<Class<?>, List<InterceptHandler>> handlers; private final ExecutorService executor; private