快资讯丨【Netty源码分析】04 服务端读流程
发布时间:2023-03-29 02:17:00 来源:腾讯云读流程
客户端接入后,下面一步操作就是读取客户端传输过来的数据,这一节我们就来分析下服务端读取客户端数据流程。从前面分析来看,channel
的事件轮询、事件处理是在NioEventLoop
的run
方法中,从这里我们就很容易找我服务端读流程的入口方法:processSelectedKeys()
。
从processSelectedKeys()
一直追踪下去,可以看到OP_READ
处理逻辑分支:
if ((readyOps & (SelectionKey.OP_READ | SelectionKey.OP_ACCEPT)) != 0 || readyOps == 0) { unsafe.read();}
可能你会比较奇怪:为什么OP_READ
和OP_ACCEPT
都会走这个分支?
(资料图)
OP_ACCEPT
是NioServerSocketChannel
处理的事件,而OP_READ
是NioSocketChannel
处理的事件,所以,虽然它们都走这个分支,但是channel类型确是不一样的,即这里的unsafe
类型也不一样,一个是:NioMessageUnsafe
,另一个是:NioSocketChannelUnsafe
。NioServerSocketChannel
负责监听客户端连接,当有客户端连接进入时,对它来说就是有个读入消息需要被处理。这里我们是处理client channle
的OP_READ
,所以,unsafe
是NioSocketChannelUnsafe
类型实例。
AbstractNioByteChannel.NioByteUnsafe#read
方法代码如下:
public final void read() { final ChannelConfig config = config(); if (shouldBreakReadReady(config)) { clearReadPending(); return; } final ChannelPipeline pipeline = pipeline(); final ByteBufAllocator allocator = config.getAllocator(); final RecvByteBufAllocator.Handle allocHandle = recvBufAllocHandle(); allocHandle.reset(config); ByteBuf byteBuf = null; boolean close = false; try { do { // 申请ByteBuf对象 byteBuf = allocHandle.allocate(allocator); //doReadBytes(byteBuf):将数据读取到ByteBuf中 //lastBytesRead()将读取的字节数设置到lastBytesRead allocHandle.lastBytesRead(doReadBytes(byteBuf)); if (allocHandle.lastBytesRead() <= 0) { byteBuf.release(); byteBuf = null; close = allocHandle.lastBytesRead() < 0; if (close) { readPending = false; } break; } allocHandle.incMessagesRead(1); readPending = false; //触发pipeline channelRead事件,将读入数据ByteBuf传入到handler中 pipeline.fireChannelRead(byteBuf); byteBuf = null; } while (allocHandle.continueReading());//判断是否继续读取 allocHandle.readComplete(); //触发pipeline channelReadComplete pipeline.fireChannelReadComplete(); if (close) { closeOnRead(pipeline); } } catch (Throwable t) { handleReadException(pipeline, byteBuf, t, close, allocHandle); } finally { if (!readPending && !config.isAutoRead()) { removeReadOp(); } }}
这个方法刨除其它逻辑,关于客户端数据处理逻辑主要包括3个步骤:
allocHandle.lastBytesRead(doReadBytes(byteBuf))
:调用java api
,从channel
中读取字节数据到ByteBuf
缓存中;pipeline.fireChannelRead(byteBuf)
:触发pipeline
的channelRead
事件,并将带有读入数据的ByteBuf
通过参数传入;pipeline.fireChannelReadComplete()
:触发pipeline
的channelReadComplete
事件;事件传播
调用pipeline
的fireChannelRead()
就可触发channelRead
事件在handler
之间传播,事件传播这块代码比较绕,给人感觉不停的来回调用容易绕晕,下面通过图可以更加直观的看出调用流程,再配合代码就很好理解了。
关键点就在于HandlerContext
中提供了一个静态方法:invokeChannelRead(final AbstractChannelHandlerContext next, Object msg)
,第一个是在哪个handler
上触发事件,第二个参数就是数据本身,通过这个方法就可以指定在哪个handler
上触发channelRead
事件。由于pipeline
中的handler
是被包装成HandlerContext
放入的,所以,可以通过handler()
方法找到真正的handler
对象进行触发。
比如pipeline
的fireChannelRead()
就是触发head
的channelRead
事件,如果处理完成需要把事件继续传播给下一个handler
,就需要调用ctx.fireChannelRead(msg)
方法即可,该方法中通过next
属性获取到下一个节点,然后执行static invokeChannelRead(next, msg)
这个方法就可以将事件传播到下一个节点上。
pipeline.fireChannelRead(byteBuf)
运行完成后会调用pipeline.fireChannelReadComplete()
方法,触发channelReadComplete
事件,执行机制和channelRead
事件一样,就不再赘述。
搞清楚上面原理,就很容易理解
ctx.fireChannelRead()
和ctx.pipeline().fireChannelRead()
之间的区别了,避免误用。
Pipeline线程模型
上面分析的都是常规模式,没有给handler
指定额外线程情况下channelRead
和channelReadComplete
传播机制,大致如下图:
先触发channelRead
事件,按照pipeline
中顺序依次触发,当所有handler
都触发完后,再触发channelReadComplete
事件,按照pipeline
中的顺序依次触发。这些所有流程采用的都是同步方式,在同一个线程中执行,这个线程就是channel
注册的NioEventLoop
。
我们来看下static void invokeChannelRead()
这个方法:
static void invokeChannelRead(final AbstractChannelHandlerContext next, Object msg) { final Object m = next.pipeline.touch(ObjectUtil.checkNotNull(msg, "msg"), next); EventExecutor executor = next.executor(); if (executor.inEventLoop()) { next.invokeChannelRead(m); } else { executor.execute(new Runnable() { @Override public void run() { next.invokeChannelRead(m); } }); }}
在执行next.invokeChannelRead(m)
方法前有个executor.inEventLoop()
判断,判断当前执行线程是不是就是handler
执行所需的线程。执行handler
方法是不能随便线程都可以去执行的,必须使用handler
内部指定的executor
线程执行器中执行才行。如下图,也就是说红色框框中的内容必须在executor
线程执行器中执行,如果当前线程和handler
执行线程不是同一个,就需要进行线程切换:则调用封装成一个任务,提交到executor
的任务队列中让其执行。
executor
线程执行器是通过next.executor()
方法获取到的,从这个方法源码中可以看到获取逻辑:如果HandlerContext
中executor
有值则直接返回;否则返回channel
注册的NioEventLoop
作为线程执行器。
在添加handler
时可以指定一个EventGroup
:pipeline.addLast( bizGroup, "handler2", new OtherTest02());
,这样,再把handler
包装成HandlerContext
过程中会从这个EventGroup
根据chooser
选取策略获得一个EventLoop
赋值给executor
。
所以,从上面分析,默认情况下handler
都是在channel
注册的NioEventLoop
线程中执行的,除非在addLast
添加handloer
时特别指定。
下面我们通过一个案例分析下pipeline
线程模型,如下,给handler02
添加一个额外的线程池:
EventLoopGroup bizGroup = new NioEventLoopGroup(10, new ThreadFactoryBuilder().setNameFormat("biz-%s").build());protected void initChannel(SocketChannel ch) throws Exception { ChannelPipeline pipeline = ch.pipeline(); pipeline.addLast( "handler01", new OtherTest01()); pipeline.addLast( bizGroup, "handler02", new OtherTest02()); pipeline.addLast( "handler03", new OtherTest03());}
这时,channelRead
和channelReadComplete
事件触发流程见下图:
channelRead
事件执行流程说明:
handler01
的channelRead
事件,本身当前线程和handler01
是同一个线程,所以,直接调用handler#channelRead()
方法;handler01#channelRead()
方法执行完成后,事件继续向下传播,需要调用handler02#channelRead()
方法,但是handler02
执行线程并不是默认的channel
的注册线程,而是额外设置的biz
线程,需要将调用包装成一个任务提交到biz
线程的任务队列taskQueue
中,然后直接返回;biz线程执行器内部线程会一直循环从taskQueue
中获取任务执行,这样就完成了线程切换效果;当handler02#channelRead()
方法执行完成后,需要执行handler03#channelRead()
,它们又不在同一个线程中执行,这时有需要切换线程,所以会把handler03#channelRead()
的调用封装成一个任务提交到register eventLoop的taskQueue
中,待其内部线程提取执行;下面再来看下channelReadComplete
事件执行流程:
a1
将任务提交给taskQueue
任务队列后直接返回了,而不是等其执行完成再返回;a1
返回后,从源码分析来看,会立即触发channelReadComplete
事件,涉及到线程切换,同理b1
这里也是将handler02#channelReadComplete()
调用封装成任务放入到biz eventLoop
的taskQueue
中的,然后也直接返回了;这样,biz eventLoop
线程执行器taskQueue
中就有两个任务,会按照顺序依次执行:先执行channelRead()
调用,再执行channelReadComplete()
调用;执行a3、b3
时同理;总结
从上面可以看出,Pipeline
中handler
可以在不同线程间切换得到关键是:taskQueue
。还要一点非常重要:handler
线程池执行器默认使用的channel
注册的NioEventLoop
这个,NioEventLoop
采用的是单线程工作模式,同时还需要处理selector.select()
事件轮询,所以,handler
里肯定不能有耗时、特别是IO
阻塞等操作,不然卡在handler
中,selector#select()
执行不到,无法及时接收到客户端传送过来的数据。
标签:
精彩推送
乘用车市场信息联席会发布数据 10月乘用车市场零售为184万辆
11月8日,乘用车市场信息联席会发布数据显示,今年前10个月乘用车市场零售达1671 6万辆,同比增长3%,...
2022-11-09至正股份发布公告 拟1.19亿元收购苏州桔云51%股权
11月8日晚间,至正股份(603991)发布公告称,公司与SUCCESS FACTORS LIMITED签署了《购买资产协议》,...
2022-11-09MSCI入摩“三步走” 三年MSCI主题基金不断涌现
自2019年11月8日,美国明晟公司(又称摩根士丹利资本国际公司,MorganStanleyCapitalInternational,以下...
2022-11-09快资讯丨【Netty源码分析】04 服务端读流程
客户端接入后,下面一步操作就是读取客户端传输过来的数据,这一节我们就来分析下服务端读取客户端数据流程。从前面分析来看,channel的事件轮
当前要闻:定调,房地产税虽迟但到?
定调,房地产税虽迟但到?,房价,税收,楼继伟,房地产税,稳定楼市
今日看点:河岸寻“新”——看传统花木小镇如何新生
成都观察牟峪兴杨柳摄影川观新闻记者吴亚飞杜杰春光明媚,植绿正当时。日前,在成都市温江区和盛镇北林绿道,和盛镇纪委带领着干部群众在金马
世界看热讯:容百科技股东户数下降4.86%,户均持股71.06万元
容百科技最新股东户数2 85万户,低于行业平均水平。公司户均持有流通股份9852股;户均流通市值71 06万元。
世界热点评!拟建学校和市场!揭东区中心区两地块规划调整公示
拟建学校和市场!揭东区中心区两地块规划调整公示,学校,揭东区,控制性,绿地率,住宅用地
越南“胜利方程式”公布!日媒警告:越南出口立国战略有“死角”?
越南“胜利方程式”公布!日媒警告:越南出口立国战略有“死角”?,越南,日本,美国,日媒,方程式,新加坡,东南亚,第二大经济体
焦点速看:银座股份股东户数增加10.95%,户均持股12.98万元
银座股份最新股东户数2 24万户,低于行业平均水平。公司户均持有流通股份2 31万股;户均流通市值12 98万元。
当前要闻:【开拍】起拍楼面价约525元/m²!澄海一宗零售商业用地挂牌!
【开拍】起拍楼面价约525元 m²!澄海一宗零售商业用地挂牌!,楼面价,出让方,汕头市,商业用地,住宅用地,土地使用权
世界观速讯丨大唐发电:2022年净利亏损4.1亿元 同比大幅收窄
证券时报e公司讯,大唐发电(601991)3月28日晚间披露年报,2022年公司实现营业收入1168 28亿元,同比增长12 76%;净利润亏损4 1亿元,去年同期
速看:新洲 | 东湖高新江北投资摘得双柳航天产业城一宗工业用地!
新洲|东湖高新江北投资摘得双柳航天产业城一宗工业用地!,江北,新洲,武汉,东湖高新,工业用地,双柳航天产业城
即时焦点:沈阳楼市新政:优化限购区域,首套房贷利率下调至3.8%
沈阳楼市新政:优化限购区域,首套房贷利率下调至3 8%,套房,非住宅,楼市新政,限购政策,房贷利率,沈阳市房产局
每日速讯:2023年3月份住房公积金工作动态
2023年3月份住房公积金工作动态,磐安县,工作动态,住房公积金,公积金贷款
【全球热闻】【图解年报】新华文轩:2022年归母净利润同比增长6.9%,约为14亿元
新华文轩于2023年3月29日披露年报,公司2022年实现营业总收入109 3亿元,同比增长4 5%;实现归母净利润13 97亿元,同比增长7%;每股收益为1 13元。
【世界报资讯】西部证券易斌:消费复苏和国企改革有望成为市场主线
西部证券易斌:消费复苏和国企改革有望成为市场主线,李莉,主线,易斌,国企改革,西部证券,消费复苏,投资银行,中信证券
聚焦:安能物流2022年实现营收93.35亿元
安能物流28日发布2022年年度业绩报告,公司2022年实现营业收入93 35亿元,经调整EBITDA为10 96亿元。2022年,公司货运总量为1250万吨,较2021
【环球速看料】先签合同再改条款细节?北京知名住宅项目橡树湾“强势”合同引众业主担忧
先签合同再改条款细节?北京知名住宅项目橡树湾“强势”合同引众业主担忧,交房,华润,橡树湾,开发商,商品房,北京市,住宅项目,高层住宅
观焦点:征地拆迁!南京这些地方有新消息了!
征地拆迁!南京这些地方有新消息了!,搬迁,南京,征收,安置房,征地拆迁
实时:资产超600万的家庭,中国有518万户,原来身边藏了这么多有钱人?
资产超600万的家庭,中国有518万户,原来身边藏了这么多有钱人?,存款,中国,中产家庭
今日热搜:【图解年报】光洋股份:2022年归母净利润为-2.3亿元,连亏两年未能扭亏
光洋股份于2023年3月29日披露年报,公司2022年实现营业总收入14 88亿元,同比下降8 3%;实现归母净利润-2 34亿元,上年同期为-8123 8万元,亏损幅度扩大。
重磅!北仑7个片区拟征收土地成片开发,涉及这几个街道→
重磅!北仑7个片区拟征收土地成片开发,涉及这几个街道→,征收,征地,北仑区,专项规划,街道办事处
焦点播报:中新网评:“清朗”行动,让网络空间事更清、理更明、法更透
今年“清朗”系列专项行动聚焦自媒体乱象,集中整治“自媒体”造谣传谣、假冒仿冒、违规营利等乱象,破解“自媒体”信息内容失真、运营行为...
世界视讯!裕田中国(00313)拟收购2家物业管理服务公司
裕田中国(00313)拟收购2家物业管理服务公司,武汉,房地产,裕田中国,物业管理服务
焦点热议:明确了!南通市区这两宗宝藏地,用地性质确定
明确了!南通市区这两宗宝藏地,用地性质确定,南通市,崇川区,宝藏地,住宅用地,田家炳中学
环球观察:定了!泰州这里也要拆迁!
定了!泰州这里也要拆迁!,拆迁,姜堰区,高港区,泰州市,高新区
世界速看:42家房企哄抢!昌平这块地创北京之最!风头盖过新城,未来便宜不了…
42家房企哄抢!昌平这块地创北京之最!风头盖过新城,未来便宜不了…,龙湖,地铁站,朱辛庄,昌平线,北京市
【图解年报】赛微电子:2022年归母净利润由盈转亏,毛利率下降14.4%
赛微电子于2023年3月29日披露年报,公司2022年实现营业总收入7 86亿元,同比下降15 4%;实现归母净利润-7336万元,上年同期为2 1亿元,未能维
农业农村部领导到北海市农产品质量检测中心调研
2023年3月23日上午,农业农村部种植业管理司朱恩林一级巡视员一行6人到北海市农产品质量检测中心进行调研,自治区农业农村厅、北海市政府、北
当前关注:公告发布!扬州这个25年老小区终于要拆迁了!
公告发布!扬州这个25年老小区终于要拆迁了!,拆迁,住宅,搬迁,商铺,征收,扬州市,大运河,中国文物,中国世界遗产,城乡房屋建筑数据
每日快播:屏山县:依托12345热线求助得到工资
近日,屏山县黄女士向12345热线来电反映:2022年12月至2023年2月,黄女士与朋友2人在屏山县书楼镇书楼卫生院工作共8400元工资未得到,希望相关部门能
环球速讯:广元市剑阁县市场监管局聚力“四抓”规范餐饮具清洗消毒
为进一步推动食品安全“两个责任”落地落实,规范餐饮单位餐饮具清洗、消毒工作,广元市剑阁县市场监管局以“春雷行动2023”为抓手,主动作...
焦点!屏山县:依托12345热线求助学校归还物品
近日,屏山县张先生来电向12345热线反映:屏山县屏山镇求实高级中学在学生不知情的情况下把学生放在寝室里的东西拿走,认为不合理,希望学校归
世界热讯:哈尔滨市松北区总价9.3亿元挂牌两宗地 去年曾拟出让但流拍
哈尔滨市松北区总价9 3亿元挂牌两宗地去年曾拟出让但流拍,世茂,流拍,挂牌,松北区,哈尔滨市,商品住房
微速讯:中介自述:心态崩溃后,我经历了行业发展“阵痛”!
中介自述:心态崩溃后,我经历了行业发展“阵痛”!,楼市,中介,房地产
全球快报:天亿马:第二大股东拟减持不超3%公司股份
天亿马3月28日公告,第二大股东深圳乐成持有公司股份445 19万股(占公司总股本比例6 75%)计划自本公告披露之日起3个交易日后的3个月内以大宗交
【全球快播报】屏山县:依托12345热线求助获得占地补偿
近日,屏山县新市镇汉溪村的杨先生向12345热线来电反映:2022年年底,当地政府在新市镇汉溪村修建水池占用了杨先生家1亩左右的土地,但一直未
环球焦点!公积金买房,利弊有哪些?优势很明显,7项不足,基数余额都重要
公积金买房,利弊有哪些?优势很明显,7项不足,基数余额都重要,违约金,商业贷款,公积金买房,公积金贷款,共同还款人
屏山县:依托12345热线咨询退伍军人 生活补贴问题
近日,屏山县中都镇红安村的周先生向12345热线来电反映:2023年周先生的退伍军人生活补贴应该是300元,但是只收到280元,希望部门告知退伍军人
方城县:特色零售终端让乡愁不再遥远
“点关注不迷路!有了这款盒装速食烩面,亲们在何时何地都可以品尝到正宗的方城烩面,家乡的味道伴随我们走遍天涯海角!”近日,一场以“方...
H&M推出全新环保先锋系列“魅力重生故事”,为可持续未来寻求积极变革
近日,H&M推出全新环保先锋系列魅力重生故事,重新演绎上世纪六十年代的时尚风潮。系列聚集时尚与环保,以可持续材料打造的装饰点亮一众单
广元市旺苍县召开制止餐饮浪费暨餐饮具消毒培训会
3月28日,广元旺苍县市场监督管理局组织召开全县制止餐饮浪费暨餐饮具消毒相关标准宣贯培训会。全县100余家餐饮经营单位共计130余人参加培训会
热点评!广元市苍溪县市场监管局扎实开展“科技之春”知识产权宣传
3月28日,广元市苍溪县市场监督管理局结合“科技之春”宣传月开展了知识产权保护与运用宣传活动。活动现场,工作人员通过设置展板、现场讲...
快看点丨成都土地市场升温,去年流拍地今天最高限价拍出
成都土地市场升温,去年流拍地今天最高限价拍出,限价,土拍,二手房,流拍地,成都市,土地市场
环球通讯!不能以抽掉年轻人的脊梁为代价,贷款利率要降,房地产不该在扩张
不能以抽掉年轻人的脊梁为代价,贷款利率要降,房地产不该在扩张,脊梁,按揭,房地产,贷款买房,贷款利率,房贷利率
环球今日报丨广元市剑阁县元山中、小学共同组织开展社会实践活动
在这春暖花开、生机盎然的大好春光里,为了达到“磨砺意志、锤炼团队、挑战自我、亲近自然”的目的,近日,剑阁县元山中、小学共同组织“用...
全球速看:印尼HJF镍铁一期项目第6条产线第一炉炉渣成功打开
【印尼HJF镍铁一期项目第6条产线第一炉炉渣成功打开】据我的钢铁网(Mysteel)调研了解,3月28日,印尼HJF镍铁一期项目(8条RKEF产线)第6条产
热头条丨广元市市场监管局深入旺苍县开展钢筋混土排水管产品质量监督检查工作
3月28日,广元市市场监督管理局产品质量安全监督管理科、产品质量监督检验所针对中央电视广播总台3 15晚会曝光江苏省盐城市滨海县高标准农田建
【速看料】广元市剑阁县柳沟镇:聚焦产业多措并举 促进产业提质增效
“产业兴百业兴”,产业振兴是乡村全面振兴的关键和基础。近年来,剑阁县柳沟镇坚持“产业强镇”思路,多措并举,做实做细产业发展各项工作...
全球报道:某房企今年计划大裁员30%!
某房企今年计划大裁员30%!,裁员,离职,降薪,房地产,大房企
恒大集团最新消息:多地开始陆续交房,保交楼任务取得积极进展!
恒大集团最新消息:多地开始陆续交房,保交楼任务取得积极进展!,交房,保交楼,许家印,恒大集团
【全球聚看点】百年足球名校重庆七中晋级中青赛全国赛
百年足球名校重庆七中晋级中青赛全国赛
- 牛市来临,投资者该如何自处?在成都无为金融培训学校学习后的我是这样做的
- 每日快看:淮安公积金热点问题解答来了!
- 世界观点:吉林省出新规:公摊面积变大了?
- 【全球快播报】壹点发布丨2022年德州成为全省唯一放贷额正增长的城市中心
- 丰台:老旧小区怎么改?现场办公问群众!
- 全球报道:舒心·省心·放心——看简阳人社分中心如何擦亮服务窗口
- 全球今热点:爱尔眼科:TECNIS Synergy跃无级人工晶状体在成都爱尔眼科医院成功植入
- 泸州市组织企业参加落实化妆品质量安全主体责任相关法规视频宣贯会
- 今日热门!古蔺县召开2023年度放心舒心消费环境示范单位工作推进会
- 当前动态:泸州市创建全国网络市场监管与服务示范区动员会召开
- 现货白银投资风险有哪些?白银投资活动有什么重要元素?
- 如何买纸黄金?纸黄金是怎么赚钱的?
- 黄金降价原因都有哪些?黄金降价原因具体体现在哪些方面?
- 哪家证券公司开户比较好?选证券公司要看哪些方面?
- 证券开户网上怎么操作?证券开户网上有哪些注意点?
- 开仓是什么意思?股票开仓的最优方法有哪些?
- 大樱桃采摘忙
- 股票明细红色绿色代表什么意思?股票成交量和股价是什么关系?
- 新股交易规则都有哪些?股票资金流入好还是流出好?
- 公司并购方式有哪些?公司并购上市公司股价的变化有哪些?
- 如何进行高位拉升止盈?股市中的顶部指是什么?
- 股票分时线怎么看?股票为什么除权?
- 可转债配售如何操作?可转债停牌一般停多久?
- 新股申购多少股就会中多少股吗?股票偏离值多少会停牌?
- 板块大涨个股不涨是洗盘吗?新债中签之后是自动扣款吗?
- 启动ipo一般多久上市成功?IPO的审核流程有哪些?
- 股票分红税是怎么交的?为什么st股票连续涨停?
- 股票1万块钱是做短线还是长线?深市新股申购需要什么条件?
- 50万逆回购一天利息怎么计算?成交量怎么看主力建仓?
- 股票高开低走怎么办?股票可转债上市对股票利好吗?
- 股票上的换手率是什么意思?买的股票配股了怎么办?
- 平仓是亏还是赚?银行股分红前买还是分红后买?
- 港股持有超过一年分红扣税吗?xd分红几天到账?
- 期货和股票涨跌有关系吗?银行利率下降怎么理财?
- 天地板洗盘还是出货?新股中签资金不够全额会扣钱吗?
- 股票为什么会出现天地板?股市转账有时间限制吗?
- 做外汇哪个平台好?十大正规外汇平台推荐
- 探究意大利百年历史品牌—Rigo单簧管的产品介绍
- 环球新资讯:李骏:2022年绿城中国交付197个项目,服务超14万户家庭
- 当前热讯:市场监管总局公布第6批查处涉疫药品和医疗用品违法典型案例
- 蓬溪县市场监管局组织开展2023年学校食堂食品安全培训
- 世界快消息!中指快评:厦门对限购、限售政策进行放松
- 环球讯息:书乡蓬溪 蓬溪县高峰山景区正式确定为国家4A级旅游景区
- 万物云朱保全:保持“长坡薄雪” 经营才会更加有韧性
- 焦点消息!瑞丰银行:2022年净利同比增20.2% 拟10送3派1.5元
- 世界快资讯丨一线临江!正地铁口!大泽湖、斑马湖限价又将创新高?!
- 全球热文:蓬溪县市场监管局扎实开展“提振消费信心 畅享舒心消费”“五进”宣传活动
- 每日热点:遂宁“一体推进”“两端发力”深化制止餐饮浪费行动
- 除甲醛干货分享,快来码住吧
- 讯飞智能录音笔拾音精准,做课堂和会议记录都能搞定
- 全球热点评!华阳股份旗下煤矿发生安全事故致一人死亡 被责令停产整顿
- 雨季不再来初中作文怎么写?雨季不再来初中作文范文?
- 【环球播资讯】超级英语句子有哪些?超级英语句子大全?
- 焦点要闻:疼爱的作文怎么写?疼爱的作文范文?
- that 引导的定语从句有哪些?that 的用法有哪些?
- 描写那拉提草原的满分作文怎么写?描写那拉提草原的满分作文范文?
- 快报:临床助理医师《生理学》知识有哪些?躯体感觉包括哪些?
- 每日观察!父母之爱作文怎么写?父母之爱作文范文?
- 天天速看:晏几道《临江仙·淡水三年欢意》译文赏析?《临江仙·淡水三年欢意》创作背景?
- 天天快看:种花让生活更美好作文怎么写?种花让生活更美好作文范文?
- 暨南大学在全国排名第几?暨南大学在广东省排名介绍?
- 当前速读:刚果盆地的气候类型和气候特点是什么?刚果盆地的地理位置?
- 每日精选:悲惨世界读后感怎么写?悲惨世界读后感范文?
- 实时:经典英文表示讨厌的句子有哪些?经典英文表示讨厌的句子大全?
- 焦点资讯:模型摄影技巧有哪些?模型摄影技巧大全?
- 最新:牙胶怎么使用?牙胶的使用方法及注意事项有哪些?
- 今日聚焦!格林童话读后感怎么写?格林童话读后感范文?
- 最新资讯:诚信的作文怎么写?诚信的作文范文?
- 全球实时:大一新生简短自我介绍怎么写?大一新生简短自我介绍文稿?
- 今日热闻!检讨书怎么写?检讨书的模板有哪些?
- 全球速读:教案的教学内容怎么写?教案的具体内容介绍?
- 资产置换协议书怎么写?资产置换协议书格式是怎样的?
- 中元节是几月几日?中元节资料介绍?
- 【全球播资讯】广东省第13届运动会主题是什么?广东省第13届运动会吉祥物是什么?
- 期货从业《期货基础知识》要点有哪些?期货交易流程是怎样的?
- 全球即时:实习期个人工作总结怎么写?实习期个人工作总结范文?
- 英文doubt的汉语是什么意思?doubt的词典解释是怎样的?
- 出口商品英语词汇有哪些?出口商品英语词汇整理?
- 当前要闻:去游泳的英文表达方式有哪些?去游泳的例句有哪些?
- 三国谋士真实排名是怎样的?三国谋士真实排名一览?
- 国际项目管理的过程是怎样的?范围管理计划是在哪个过程制定的?
- 安置房没有房产证的原因是什么?安置房能办理房产证吗?
- 焦点速读:机械绘图员的岗位职责是什么?如何绘制三维图?
- 天天动态:本批次共有产权房咨询受理工作完成,接受咨询约3.9万余人次
- 中国造园艺术的特点是什么?园林景观造景艺术手法介绍?
- 焦点速递!企业如何提高员工忠诚度?企业提高员工忠诚度的方法?
- 实时:《圆明园的毁灭》教学反思怎么写?《圆明园的毁灭》教学反思包括哪些方面?
- 新疆小吃羊肉串怎么做?新疆小吃羊肉串的做法介绍?
- 哑铃双臂划船动作是怎样的?哑铃双臂划船动作的方法介绍?
- 天天视点!围棋怎么玩?围棋的规则与玩法有哪些?
- 【世界聚看点】维修电工是干什么的?维修电工的工作内容有哪些?
- 消防安全广播稿怎么写?消防安全广播稿范文?
- 当前热点-重磅!擅自拨付商品房预售资金 渤海银行在湘房贷业务被叫停
- 反假币宣传,我们在行动
- 标普下调欧元区2024年GDP增长预测至1% 温和衰退风险升高
- 天天速看:揭秘海淀四季青的10个小道消息丨瞰地
- 2年期农发行债中标结果出炉(03-28)
- 【速看料】移动警务建设助力指挥调度!全警全域打造科技应用“广州特色”
- 环球微头条丨榜单里的佛山|制造业当家,佛山拼了!1-2月工业投资增长56.4%
- 华中数控3月28日盘中跌幅达5%
- 环球聚焦:ST花王3月28日快速上涨
- 环球速讯:财政部:应尽快开展房产税试点?内行:2023年后,房产税或这样收
- 酃湖公园、陆家新区!衡阳市多宗优质地块推介招商
- 全面提额!牡丹江市住房公积金优惠政策来了
- 南京钟山风景区有什么好玩的地方?钟山风景区门票价格是多少?
- 台儿庄古城主要景点有哪些?台儿庄古城景点介绍是什么?
- 保定白石山风景区游览路线有哪些?白石山风景区游玩景点有哪些?
- 湖北哪里有花海旅游景点?湖北樱花在哪里看?
- 扬州看樱花的地方在哪里?苏州哪里可以看油菜花?
- 台儿庄古城一日游攻略有哪些?台儿庄古城游玩路线有哪些?
- 惠州黄花风铃木在哪里?温州乐清春季赏花好去处有哪些?
- 青海湖最佳旅游月份是什么时候?青海湖旅游攻略有哪些?
- 广州周边值得一去古村落有哪些?广州有哪些岛屿景点?
- 3月份国内最佳旅游地有哪些?济南千佛山一日游攻略有哪些?
- 西塘古镇景区怎么样?西塘古镇景区一日游攻略有哪些?
- 岳麓山游玩攻略有哪些?岳麓山必去景点有哪些?
- 天柱山风景区自驾游攻略有哪些?天柱山风景区游玩路线有哪些?
- 徽州古城一日游攻略有哪些?徽州古城最佳游玩路线是什么?
- 泰山花海都有什么花?杭州赏花攻略有哪些?
- 天柱山风景区门票价格是多少?天柱山景区介绍是什么?
- 四川甘孜春季赏花攻略有哪些?郑州赏花的地方有哪些?
- 河南赏花去哪?广州春天赏花的地方有哪些?
- 余杭赏花好去处有哪些?潍坊赏花的地方有哪些?
- 2人去黄山旅游要多少钱?黄山推荐玩法有哪些?
- 洋湖湿地公园怎么样?洋湖湿地公园游玩攻略有哪些?
- 全球观点:金华划拨供地批前公示,涉及2个地块!
- 天天日报丨拿地!万象城落户荔湾,终于等到最强的白鹅潭
- 头条焦点:金牛区锦江旁一优质宗地成功出让!
- 当前快播:昭通昭阳区2023年住宅用地供应计划出炉,涉及这些地方!快看有没有你家?
- 当前看点!3月28日UWB概念板块涨幅达2%
- 今日最新!神火股份:煤炭、电解铝等产品量价齐升 2022年归母净利同比增133.9%至75.71亿元 拟10派10元
- 世界观焦点:成都3宗宅地均达最高限价 保利、邦泰等总成交价38.02亿元摘地
- 资阳市市场监管局到资阳中车调研齿轨车辆标准体系建设
- 当前最新:中指快评:成都延续首场土拍热度,3宗宅地均触顶成交
- 环球最资讯丨问答 | 厦门市无房证明怎么查询/打印?
- 【世界播资讯】巴州区宕梁市场监管所:执照送达“不跑腿” 便民服务“零距离”
- 港股午评|恒指涨0.71% 手游股强势 腾讯劲升4%
- 今日22只A股封板 石油石化行业涨幅最大
- 焦点简讯:金融为民守初心 兴业银行持续构建消保工作新格局
- 万物云朱保全:2022年盈余保障倍数1.7倍,完成38个蝶城改造
- 【世界独家】巴州区清江市场监管所:多措并举开展“一老一小”食品安全专项检查行动
- 世界通讯!资阳市副市长刘廷安到安岳督导学校食品安全工作
- 成都高新智能网联产创融合加速器正式启航,打造下一个智联网联新高地
- 岭南股份称腾讯ChatGPT产品推出在即
- 深耕服务 钱小乐跻身借钱“三巨头”并非偶然
- 全球微资讯!温州市区这个村要拆了!
- 每日快报!房地产税试点,真的不远了
- 每日视讯:盛天网络3月28日盘中涨幅达5%
- 【环球聚看点】福瑞股份3月28日盘中涨幅达5%
- 【世界时快讯】未拍先火!合肥2023年首轮土拍瑶海真的火!