handler

Netty之ChannelPipeline(二)移除ChannelHandler

无人久伴 提交于 2020-02-05 02:37:18
上次说了添加,这次看看移除。 remove(ChannelHandler handler)方法,从pipeline移除指定ChannelHandler对象 @Override public final ChannelPipeline remove ( ChannelHandler handler ) { remove ( getContextOrDie ( handler ) ) ; return this ; } getContextOrDie(ChannelHandler handler)方法获得相应AbstractChannelHandlerContext节点: private AbstractChannelHandlerContext getContextOrDie ( ChannelHandler handler ) { AbstractChannelHandlerContext ctx = ( AbstractChannelHandlerContext ) context ( handler ) ; if ( ctx == null ) { //若得不到节点,抛异常 throw new NoSuchElementException ( handler . getClass ( ) . getName ( ) ) ; } else { return ctx ; } }

Netty学习(五)-DelimiterBasedFrameDecoder

只谈情不闲聊 提交于 2020-02-05 00:13:42
上一节我们说了LineBasedframeDecoder来解决粘包拆包的问题,TCP以流的方式进行数据传输,上层应用协议为了对消息进行区分,一般采用如下4种方式: 消息长度固定,累计读取到消息长度总和为定长Len的报文之后即认为是读取到了一个完整的消息。计数器归位,重新读取。 将回车换行符作为消息结束符。 将特殊的分隔符作为消息分隔符,回车换行符是他的一种。 通过在消息头定义长度字段来标识消息总长度。 LineBasedframeDecoder属于第二种,今天我们要说的DelimiterBasedFrameDecoder和FixedLengthFrameDecoder属于第三种和第一种。DelimiterBasedFrameDecoder用来解决以特殊符号作为消息结束符的粘包问题,FixedLengthFrameDecoder用来解决定长消息的粘包问题。下面首先来用DelimiterBasedFrameDecoder来写一个例子,我们看一下效果然后接着分析用法。 1. DelimiterBasedFrameDecoder使用 服务端: public class HelloWordServer { private int port; public HelloWordServer(int port) { this.port = port; } public void start(){

SpringMVC使用mvc:annotation-driven自动注册标签

淺唱寂寞╮ 提交于 2020-02-04 13:23:18
1、处理器映射器(HandlerMapping)和处理器适配器(HandlerAdapter) 处理器映射器(HandlerMapping)其作用是根据请求的URL路径,通过注解或者XML配置,寻找匹配的处理器(Handler)信息。处理器适配器(HandlerAdapter)其作用是根据映射器找到的处理器(Handler)信息,按照特定规则执行相关的处理器(Handler)。对于用户的请求,处理器映射器和处理器适配器为前端控制器(DispatcherServlet)与处理器(Handler)的交互搭建了重要的桥梁。 处理器映射器和处理器适配器有两种配置方式:一种是基于XML的资源配置,也即非注解的配置方式;另外一种是基于Annotation注解的配置。 1.1 非注解的处理器映射器和适配器(基于XML的资源配置) 第一种配置方式为非注解的处理器映射器和适配器,声明相关的bean及实现即可,配置如下: <!-- 处理器映射器 --> <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/> <!-- 处理器适配器 --> <bean class="org.springframework.web.servlet.mvc.method

python的urllib2库详细使用说明

感情迁移 提交于 2020-02-04 04:21:08
一直以来技术群里会有新入行的同学提问关于urllib和urllib2以及cookielib相关的问题。所以我打算在这里总结一下,避免大家反复回答同样的问题浪费资源。 这篇属于教程类的文字,如果你已经非常了解urllib2和cookielib那么请忽略本篇。 首先从一段代码开始, #cookie import urllib2 import cookielib cookie = cookielib.CookieJar() opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie)) request = urllib2.Request(url='http://www.baidu.com/') request.add_header('User-Agent','Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1') response = opener.open(request) for item in cookie: print item.value 很多同学说,我可以直接在openr.open()里写url,为什么你要用request。其实我这么写就是为了整理一下一般使用urllib2构造请求的常用步骤。 初步,urllib2构造请求常用步骤(结合上面的代码): 1

Java NIO的多路复用及reactor

微笑、不失礼 提交于 2020-02-04 00:12:02
(from:http://developer.51cto.com/art/201112/306489.htm) 以下描述,为了说明问题,就提提历史(类似的东西,网上一搜一大把,但是希望你能在这里止步,知道到底是怎么回事。如果还是不清楚,咱就站内沟通!)。 在我(刚)看nio的这段时间里,主要接触了几个东西,就是关于server和client。java之前的io完全可以胜任,但是效率不高,为何效率不高呢? ===============history==start=============== //TODO:finish the old style of server and socket data transion. ServerSocket socket = new ServerSocket(80); while (true) { final Socket connection = socket.accept(); handleRequest(connection); } ===============history==end in the future================ 在上面的代码片段中,我们只能是一个request一个的进行处理。这使得所有的请求都阻塞了。如果我们再改变一下,将handleRequest方法封装到线程中处理: if(connection =

JavaNetty拆包粘包(二)

吃可爱长大的小学妹 提交于 2020-02-03 17:18:14
netty 使用 tcp/ip 协议传输数据。而 tcp/ip 协议是类似水流一样的数据传输方式。多次 访问的时候有可能出现数据粘包的问题,解决这种问题的方式如下: 定长数据流 客户端和服务器,提前协调好,每个消息长度固定。(如:长度 10)。如果客户端或服 务器写出的数据不足 10,则使用空白字符补足(如:使用空格)。 /** * 1. 单线程组 * 2. Bootstrap配置启动信息 * 3. 注册业务处理Handler * 4. connect连接服务,并发起请求 */ import java.nio.charset.Charset; import java.util.Scanner; import java.util.concurrent.TimeUnit; import io.netty.bootstrap.Bootstrap; import io.netty.buffer.Unpooled; import io.netty.channel.ChannelFuture; import io.netty.channel.ChannelHandler; import io.netty.channel.ChannelInitializer; import io.netty.channel.EventLoopGroup; import io.netty.channel.nio

查看网络图片

心已入冬 提交于 2020-02-03 13:10:02
界面中有三个控件,一个EditText,一个Button,一个ImageView 1、下面是具体布局文件 <EditText   android:id="@+id/picturepagh"   android:layout_width="fill_parent"   android:layout_height="wrap_content"   android:text="@string/hello_world" /> <Button   android:id="@+id/btn"   android:layout_width="fill_parent"   android:layout_height="wrap_content"   android:text="查看" /> <ImageButton   android:id="@+id/imageView"   android:layout_width="fill_parent"   android:layout_height="200px" /> 2、在MainActivity中进行图片图示代码编写 public class MainActivity extends Activity { private Button btn; private EditText path; private ImageView imgview;

STM32 分析启动代码

折月煮酒 提交于 2020-02-03 11:02:25
0x08000000 0408 DCW 0x0408 0x08000002 2000 DCW 0x2000 0x08000004 0059 DCW 0x0059 0x08000006 0800 DCW 0x0800 0x08000008 00AF DCW 0x00AF 0x0800000A 0800 DCW 0x0800 0x0800000C 00A7 DCW 0x00A7 0x0800000E 0800 DCW 0x0800 0x08000010 00AB DCW 0x00AB 0x08000012 0800 DCW 0x0800 0x08000014 00A1 DCW 0x00A1 0x08000016 0800 DCW 0x0800 0x08000018 00C9 DCW 0x00C9 0x0800001A 0800 DCW 0x0800 0x0800001C 0000 DCW 0x0000 0x0800001E 0000 DCW 0x0000 0x08000020 0000 DCW 0x0000 0x08000022 0000 DCW 0x0000 0x08000024 0000 DCW 0x0000 0x08000026 0000 DCW 0x0000 0x08000028 0000 DCW 0x0000 0x0800002A 0000 DCW 0x0000

IdleHandler原理分析

寵の児 提交于 2020-02-03 09:03:30
1.使用方法及场景 之前做过冷启动优化,在冷启动的场景有很多的任务其实并不需要马上启动,通常的做法就是做一个延迟启动,如下所示 Handler mHandler = new Handler(); mHandler.postDelayed(() -> { //do something }, 1000); 将任务延迟启动1000ms,但是这个延迟启动的时间不好确定,只能是自己预估的,对于一些高端手机1000ms可能多了,一些低端手机可能1000ms还不够。这个时候IdelHandler就可以解决这个问题,它能够在CPU空闲的时候再执行指定的任务。 使用方法也很简单,如下所示,调用addIdleHandler方法就可以了 MessageQueue.IdleHandler idleHandler = new MessageQueue.IdleHandler() { @Override public boolean queueIdle() { //do something return false; } }; Looper.getMainLooper().getQueue().addIdleHandler(idleHandler); 2.基本原理 我们来看下IdelHandler到底是怎么实现的。 首先来看下这个接口,如注释所示,返回true和返回false是有区别的。 public

安卓加载网络图片实现轮播以及跳过功能

泄露秘密 提交于 2020-02-03 08:10:19
天气冷,先热身, 在之前demo的基础上,新增加了跳过按钮,点击跳过,直接进入下一个activity。 ******重点: 在 AndroidManifest.xml 的 application 中添加 android:usesCleartextTraffic="true"*****************/ 最近自己根据领导要求app启动页面要放产品图片(以轮播的形式),方便用户查看,做了一个简单的demo,实现了基本图片轮播功能,亲测可用。 csdn地址:https://download.csdn.net/download/qq_35702985/11545257(旧地址,只有网络图片轮播功能) csdn地址:https://download.csdn.net/download/qq_35702985/11705792(新地址,网络图片轮播功能 + 跳过功能) 下面贴了部分代码: 网络图片加载: MainActivity: String[] urls = getResources().getStringArray(R.array.url);List list = Arrays.asList(urls);images = new ArrayList(list);//设置自动轮播,默认为truebanner.isAutoPlay(true);//设置轮播时间banner