handler

pipeline的添加顺序和执行顺序

你说的曾经没有我的故事 提交于 2019-12-05 15:04:17
原文链接: https://www.cnblogs.com/ruber/p/10186571.html 本文只想讨论一下pipeline的执行顺序问题,因为这个搞不明白就不知道先添加编码还是解码,是不是可以混淆添加等等一系列事情 1 pipeline.addLast(new outboundsHandler1()); //out1 2 pipeline.addLast(new outboundsHandler2()); //out2 3 4 pipeline.addLast(new InboundsHandler1()); //in1 5 pipeline.addLast(new InboundsHandler2()); //in2 6 pipeline.addLast("handler", new HelloServerHandler());//in3 先说最基本的, 读入数据,需要解码数据,执行顺序和注册顺序一致 in1 --> in2 -->in3 他们之间通过 ctx.fireChannelRead(msg);进行传递 解码完成,逻辑处理,进行数据发送 通过 ctx.writeAndFlush()就完成从in -->out的转换 out的执行顺是和注册顺序相反的,也就是out2 -->out1这么个顺序 out间的传递通过ctx.writeAndFlush();函数进行传递

动手造轮子:实现简单的 EventQueue

泄露秘密 提交于 2019-12-05 13:37:42
摘自: https://www.cnblogs.com/weihanli/p/implement-event-queue.html 动手造轮子:实现简单的 EventQueue 动手造轮子:实现简单的 EventQueue Intro # 最近项目里有遇到一些并发的问题,想实现一个队列来将并发的请求一个一个串行处理,可以理解为使用消息队列处理并发问题,之前实现过一个简单的 EventBus ,于是想在 EventBus 的基础上改造一下,加一个队列,改造成类似消息队列的处理模式。消息的处理(Consumer)直接使用 .netcore 里的 IHostedService 来实现了一个简单的后台任务处理。 初步设计 # Event 抽象的事件 EventHandler 处理 Event 的方法 EventStore 保存订阅 Event 的 EventHandler EventQueue 保存 Event 的队列 EventPublisher 发布 Event EventConsumer 处理 Event 队列里的 Event EventSubscriptionManager 管理订阅 Event 的 EventHandler 实现代码 # EventBase 定义了基本事件信息,事件发生时间以及事件的id: Copy public abstract class EventBase

Android 异步加载解决方案

陌路散爱 提交于 2019-12-05 13:11:40
Android 的 Lazy Load 主要体现在网络数据(图片)异步加载、数据库查询、复杂业务逻辑处理以及费时任务操作导致的异步处理等方面。在介绍 Android 开发过程中,异步处理这个常见的技术问题之前,我们简单回顾下 Android 开发过程中需要注意的几个地方。 Android 应用开发过程中必须遵循单线程模型 (Single Thread Model) 的原则。因为 Android 的 UI 操作并不是线程安全的,所以涉及 UI 的操作必须在 UI 线程中完成。但是并非所有的操作都能在主线程中进行,Google工程师在设计上约定, Android 应用在 5s 内无响应的话会导致 ANR(Application Not Response) ,这就要求开发者必须遵循两条法则: 1 、不能阻塞 UI 线程, 2 、确保只在 UI 线程中访问 Android UI 工具包。于是,开启子线程进行异步处理的技术方案应运而生。 本文以自定义 ListView ,异步加载网络图片示例,总结了 Android 开发过程中,常用的三种异步加载的技术方案。 相关资源: AndroidManifest.xml <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.doodle

Android中Handler Thread及Runnable之间的关系

℡╲_俬逩灬. 提交于 2019-12-05 12:57:57
Android中Handler Thread及Runnable之间的关系 在多线程编程这块,我们经常要使用Handler,Thread和Runnable这三个类,那么他们之间的关系你是否弄清楚了呢? 首先说明Android的CPU分配的最小单元是线程,Handler一般是在某个线程里创建的,因而Handler和Thread就是相互绑定的,一一对应。 而Runnable是一个接口,Thread是Runnable的子类。所以说,他俩都算一个进程。 HandlerThread顾名思义就是可以处理消息循环的线程,他是一个拥有Looper的线程,可以处理消息循环。 与其说Handler和一个线程绑定,不如说Handler是和Looper一一对应的。 最后需要说明的是,在UI线程(主线程)中: mHandler=new Handler(); mHandler.post(new Runnable(){ void run(){ //执行代码... } }); 这个线程其实是在UI线程之内运行的,并没有新建线程。 常见的新建线程的方法是: Thread thread = new Thread(); thread.start(); HandlerThread thread = new HandlerThread("string"); thread.start(); Android 中 Handler

Handler与Android多线程

浪子不回头ぞ 提交于 2019-12-05 12:57:42
下面是一段大家都比较熟悉的代码: Handler handler = new Handler(); handler.post(myThread); //使用匿名内部类创建一个线程myThread Runnable mythread = new Runnable() { public void run() { } }; 一开始,相信很多人都以为myThread中的run()方法会在一个新的线程中运行,但事实并非如此。 上述代码中的handler并没有调用线程myThread的start()方法,而是直接调用了run()方法,这也就意味着实际上并没有创建一个新的线程,只是在当前线程中调用run()方法而已。 这牵扯出一个问题,如果我们将一个很耗时的操作放到了run()方法内,然后使用一个Handler对象将该线程post到线程队列。原本我们希望将这些耗时操作放到另外一个线程中,以免影响当前进程。但实际上却恰恰相反:post()以下的那些代码必须等到run()方法执行完毕后才能继续执行。如当前线程为主线程,那么主程序便会处于硬直状态。 那么应该如何去实现真正的多线程呢? 一种最简便的方法就是直接利用JAVA中的实现多线程的方法,即建立一个Thread对象,然后调用start()方法。 还有另外一种方法,代码如下: //HandlerThread建立了一个新线程,它包含一个Looper

JQuery - One handler for multiple elements using variables

北战南征 提交于 2019-12-05 12:41:48
I have two variables defined like this: var $a = $('#a'), $b = $('#b'); How can I rewrite the following line using $a and $b? $('#a, #b').click(function(e){...}); $([$a.get(0), $b.get(0)]).click(function(e) { ... }); $a.add($b).click(function(e){...}); add returns a new node set holding the union. $b can be "pretty much anything that $() accepts." It seems you ca do just this: $(deleteBtn).add(copyBtn).add(moveBtn).click(function(){}); As it says here http://api.jquery.com/add/ Depends of what you want to do next with your vars. You could just define them as one: var $a = $('#a, #b'); $a.click

什么是netty--通俗易懂

假装没事ソ 提交于 2019-12-05 12:34:49
一. Netty介绍 1.什么是netty Netty 是由 JBOSS 提供的一个 Java 开源框架。 Netty 提供异步的、基于事件驱动的网络应用程序框架,用以快速开发高性能、高可靠性的网络 IO 程序 , 是目前最流行的 NIO 框架, Netty 在互联网领域、大数据分布式计算领域、游戏行业、通信行业等获得了广泛的应用,知名的 Elasticsearch 、 Dubbo 框架内部都采用了 Netty 。 2.为什么要用netty 原生 NIO 存在问题 : 1.NIO 的类库和 API 繁杂 2. 需要熟悉 Java 多线程编程,因为 NIO 编程涉及到 Reactor 模式,必须对多线程和网络编程非常熟悉, 才能编写出高质量的 NIO 程序 3. 开发工作量和难度都非常大。例如客户端面临断连重连、网络闪断、半包读写、失败缓存、网络拥塞和异常 流的处理等等处理起来难度会比较大。 4.JDK NIO 的 Bug :例如臭名昭著的 Epoll Bug ,它会导致 Selector 空轮询,最终导致 CPU 100% 。直到 JDK 1.7 版本该问题仍旧存在,没有被根本解决。 3.Netty的优点 Netty 对 JDK 自带的 NIO 的 API 进行了封装,解决了上述问题。 1. 设计优雅:适用于各种传输类型的统一 API 阻塞和非阻塞 Socket

jquery: is there a fail handler for $.post in Jquery?

故事扮演 提交于 2019-12-05 11:56:10
When $.post succeeds, there is a success handler for it. What happens if it fails? Is there a similar handler that we can use for this case, so that we can inform the user that something is not happening right? There is not, according to the documentation , a specific error handler for $.post method. What you have to do, if you want to have both the success and fail handlers, is to use the low-level $.ajax method. It's documentation can be found here: http://api.jquery.com/jQuery.ajax/ $.ajax({ type: "POST", url: "some.php", success: function(html){ /* Do success stuff here */ }, error:

WPF customize DelegateCommand

跟風遠走 提交于 2019-12-05 11:45:29
using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; namespace WpfApp55.ViewModel { public class VM : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; public void OnPropertyChanged(string propName) { var handler = PropertyChanged; if (handler != null) { handler(this, new PropertyChangedEventArgs(propName)); } } private DelegateCommand UCCmdValue; public DelegateCommand UCCmd { get { if(UCCmdValue==null) { UCCmdValue = new DelegateCommand

其他功能组件

人走茶凉 提交于 2019-12-05 11:42:37
其他功能组件 过滤Filtering 对于列表数据可能需要根据字段进行过滤,我们可以通过添加django-fitlter扩展来增强支持。 pip install django-filter 在配置文件中增加过滤后端的设置: INSTALLED_APPS = [ ... 'django_filters', # 需要注册应用, ] REST_FRAMEWORK = { ... 'DEFAULT_FILTER_BACKENDS': ('django_filters.rest_framework.DjangoFilterBackend',) } 在视图中添加filter_fields属性,指定可以过滤的字段 class BookListView(ListAPIView): queryset = BookInfo.objects.all() serializer_class = BookInfoSerializer filter_fields = ('btitle', 'bread') # 127.0.0.1:8000/books/?btitle=西游记 排序 对于列表数据,REST framework提供了 OrderingFilter 过滤器来帮助我们快速指明数据按照指定字段进行排序。 使用方法: 在类视图中设置filter_backends,使用 rest_framework