handler

深入Gin框架内幕(二)

天大地大妈咪最大 提交于 2020-01-24 20:41:43
在上一篇文章 深入gin框架内幕(一) 中,主要介绍了Gin框架中是如何创建一个HTTP服务以及内部的核心结构和常用的一些结构体方法,并在最后以一个简单的示例来详细讲解Gin框架内部具体是如何运行的,但是在最后我们会发现使用了一个 Context 引用对象的一些方法来返回具体的HTTP响应数据,在本篇文章中,我们将继续学习和分析Gin框架内幕。 在开始分析之前,我们先简单回顾一下上一个章节中讲到的Gin框架中的几个核心的结构. Gin框架中的几个核心结构 Gin框架中的几个重要的模型: Engine : 用来初始化一个 gin 对象实例,在该对象实例中主要包含了一些框架的基础功能,比如日志,中间件设置,路由控制(组),以及handlercontext等相关方法. 源码文件 Router : 用来定义各种路由规则和条件,并通过HTTP服务将具体的路由注册到一个由context实现的handler中 Context: Context 是框架中非常重要的一点,它允许我们在中间件间共享变量,管理整个流程,验证请求的json以及提供一个json的响应体. 通常情况下我们的业务逻辑处理也是在整个Context引用对象中进行实现的. Bind: 在Context中我们已经可以获取到请求的详细信息,比如HTTP请求头和请求体,但是我们需要根据不同的HTTP协议参数来获取相应的格式化

Runnable posted in another runnable not executed

戏子无情 提交于 2020-01-24 20:22:04
问题 I'm trying to run a runnable from another runnable using Handler.post() method of my singleton but this second runnable is not being run until after the original runnable finishes. In the example code below I am calling MyManager,getInstance().startCommand() from somewhere in the application. The myRun variable in the MyCommand class has a sleep put on the thread so I can test a timeout feature, but the runnable called mTimeoutTimer is not be executed until AFTER the myRun runnable is

Java框架之SpringMVC 05-拦截器-异常映射-Spring工作流程

久未见 提交于 2020-01-24 19:36:02
SpringMVC 拦截器   Spring MVC也可以使用拦截器对请求进行拦截处理,可以自定义拦截器来实现特定的功能,自定义的拦截器可以 实现 HandlerInterceptor接口 中的 三 个方法 , 也可以 继承HandlerInterceptorAdapter 适配器类按照需要那个方法,就实现哪个方法 过滤器与拦截器区别   过滤器:过滤器在Servlet之前操作   拦截器:拦截器在Servlet之后,请求处理器(Controller)之前操作。 拦截器三个方法   ① preHandle ():这个方法在(Controller) 处理器处理请求之前被调用 ,在该方法中对用户请求 request 进行处理。如果该拦截器对请求进行拦截处理后还要调用其他的拦截器,或者是业务处理器去进行处理,则返回 true ;如果不需要再调用其他的组件去处理请求,则返回false。(如果返回false则后续操作都不再执行,类似于过滤器的 doFilter 所以正常情况下不要返回 false)   ② postHandle ():这个方法在(Controller) 处理器处理完请求后,但是 DispatcherServlet 向客户端返回响应前 (在视图渲染之前)被调用 ,在该方法中对用户请求request进行处理。   ③ afterCompletion ():这个方法在

Netty框架介绍

旧城冷巷雨未停 提交于 2020-01-24 17:35:59
Netty框架介绍 转自:http://www.toutiao.com/i6398482015196283394/ 一 初步了解 Netty Netty是由 JBoss公司推出的一个高性能事件驱动型异步非阻塞的 IO(NIO)框架。用于建立 TCP等底层的连接,基于 Netty可以建立高性能的 Http服务器。支持 HTTP、 WebSocket、 Protobuf、 Binary TCP和 UDP。 Netty提供了 NIO和 BIO(OIO阻塞 IO)两种模式处理逻辑,其中 NIO主要通过一个 BOSS线程处理等待链接的接入,若干个 Worker线程 (从 worder线程池取出一个赋给 channel,因为 channel持有真正的 java网络对象 )接过 BOSS线程递交过来的 Channel进行数据读写并且触发相应的事件传递给 pipeline进行数据处理 ,而 BIO(OIO)方式服务器端虽然还是通过一个 BOSS线程来处理等待链接的接入,但是客户端还是由主线程直接 connect,另外写数据 C/S两端都是直接主线程写,而数据读取则是通过一个 Worker线程 BLOCK方式读取 (一直等待,直到读到数据,除非 channel关闭 )。 总体结构图 :(摘自 Netty官网 ) 二 Netty组件 为了更好的理解和进一步深入 Netty,我们先总体认识一下

Springboot中注册拦截器

家住魔仙堡 提交于 2020-01-24 14:26:37
public class MyInterceptor implements HandlerInterceptor { @Override public boolean preHandle ( HttpServletRequest request , HttpServletResponse response , Object handler ) throws Exception { System . out . println ( "preHandle...." ) ; return true ; } @Override public void postHandle ( HttpServletRequest request , HttpServletResponse response , Object handler , ModelAndView modelAndView ) throws Exception { System . out . println ( "postHandle....." ) ; } @Override public void afterCompletion ( HttpServletRequest request , HttpServletResponse response , Object handler , Exception ex ) throws

从0开始的FreeRTOS(4)

六月ゝ 毕业季﹏ 提交于 2020-01-24 11:50:44
“从0开始的FreeRTOS”系列教程第四讲 作者:satori 这一次我们来进行基于FreeRTOS的任务管理实验。 在开讲之前,推荐一下Zou Changjun翻译的FreeRTOS实时内核使用指南(官方网站上的英文原名是Mastering_the_FreeRTOS_Real_Time_Kernel-A_Hands-On_Tutorial_Guide),在后面讲解API时我们力求精简易懂,所以不会说太多详细的内容,具体可以参见该文档和官方API手册(文末有本文档的下载链接)。 回顾一下上次我们介绍的有关FreeRTOS的进程的知识: 主要有:进程的概念,进程的调度机制 对于FreeRTOS而言,不同优先级的进程之间采用优先级调度算法,对于同优先级的进程之间采用时间片轮转调度算法+FCFS算法。 本次实验我们主要的实验内容为 任务的创建 同优先级进程之间的时间片轮转调度算法 不同优先级进程之间的优先级调度算法 任务的删除 任务的挂起(延时函数) 首先我们先来学习一下和FreeRTOS的任务创建有关的API: 对于初学者而言,比较需要关心的参数有以下几个:pvTaskCode,pcName和uxPriority pvTaskCode是任务函数名 pcName是用户起的函数名 uxPriority是任务优先级 在cude建立的工程中,我们不会直接使用freertos的API

Android - Android 面试题集 -- Android 部分答案

萝らか妹 提交于 2020-01-24 05:19:22
2.1 Activity 1.Activity是什么? Activity是Android的四大组件之一。是用户操作的可视化界面;它为用户提供了一个完成操作指令的窗口。 当我们创建完毕Activity之后,需要调用setContentView()方法来完成界面的显示;以此来为用户提供交互的入口。 2.典型情况下的Activity生命周期? Activity启动–>onCreate()–>onStart()–>onResume() 点击home键回到桌面–>onPause()–>onStop() 再次回到原Activity时–>onRestart()–>onStart()–>onResume() 退出当前Activity时–>onPause()–>onStop()–>onDestroy() 3.异常情况下的Activity的生命周期 & 数据如何保存和恢复? 在onStop之前调用onSaveInstanceState保存当前Activity状态,当Activity被重新创建后,系统调用 onRestoreInstanceState,并且把Activity销毁时onSaveInstanceState方法所保存的Bundle对象 作为参数传递给onRestoreInstanceState和onCreate方法 onRestoreInstanceState的调用时机发生在onStart之后

委托异步调用方法

血红的双手。 提交于 2020-01-24 01:59:09
public delegate string CaptureHandler(string ip); public class CaptureService { public static string CapturePicture(string ip) { Thread.Sleep(3000); Console.WriteLine("work done part one"); return ip.ToString(); } } static void Main(string[] args) { //Thread t = new Thread(new ParameterizedThreadStart(functionA)); CaptureHandler handler = new CaptureHandler(CaptureService.CapturePicture); IAsyncResult result = handler.BeginInvoke("192.168.0.109", new AsyncCallback(SaveDb), handler); Console.WriteLine("main work continue"); Console.ReadKey(); } private static void SaveDb(IAsyncResult ar) { if

Nginx学习笔记(一)

泄露秘密 提交于 2020-01-24 00:28:57
** Nginx进程模型 ** 1. 多进程模型: 进程间相互独立,无需加锁,且互不影响; 一个进程退出了不影响其他的进程运行,降低风险; 当请求到来,多个worker通过竞争accrpt_mutex而获得注册listenfd读事件,在读事件里调用accept接受连接。 2. 异步非阻塞: 处理网络事件与I/O复用相同,同时监控多个事件,当有事件就绪了就去读写; 一个进程同时处理的请求只有一个,在请求间不断切换; 切换是因为异步事件未准备好而主动让出的,类似于循环处理多个准备好的事件,没有任何代价 。 3. 信号: 如果Nginx在等待事件(epoll_wait时),程序收到信号,在信号处理函数处理完成后,epoll_wait会返回错误,然后程序可以再次进入epoll_wait调用。 4. 定时器 Nginx借助epoll_wait的超时时间实现定时器; Nginx的定时器事件是放在一颗维护定时器的红黑树里面,每次进入epoll_wait前,先从该红黑树中拿到所有定时器事件的最小时间,在计算出epoll_wait的超时时间后进入epoll_wait; 所以,当没有任何网络事件到来,也没有信号发生时,epoll_wait会超时,即定时器事件到了; 这时Nginx会检查所有的超时事件,将它们状态设置为超时,然后再去处理网络事件。 Nginx事件处理模型(伪代码): while (

Eclipse RCP 4 - Handler method parameters

試著忘記壹切 提交于 2020-01-23 11:44:32
问题 I'm currently taking a look to the new Eclipse RCP framework and have a questions about handlers. In RCP 3.x a handler class needed to implement an interface, so the methods where given. In RCP 4 the handler class doesn't need to implement an interface. Instead you annotate the methods. E.g. if you have an ExitHandler as in Vogellas Tutorial you have an @Execute annotation. As you can see, there's an IWorkbench parameter passed. package com.example.e4.rcp.todo.handler; import org.eclipse.e4