`
xiaoZ5919
  • 浏览: 406799 次
  • 性别: Icon_minigender_1
  • 来自: 安平人@北京
博客专栏
Group-logo
Netty学习笔记
浏览量:73389
社区版块
存档分类
最新评论

基于Netty打造HttpClient实现股票实时推送

阅读更多

   Netty也研究了一段时间,实践是对知识掌握的试金石。有些东西只是看了面儿上的东西我觉得懂了,如不去深入,一旦要用它去做点什么东西却又觉得无从下手。学车的时候,学员问教练我怎么算是学会开车了,教练告诉他当你倒着开和向前开一样自如的时候就算学会了。怎么算掌握了一项技术呢?我的观点,多阅读源码,然后去实践,如此反复,读源码就像倒车。

      为啥用Netty去实现呢?首先提供了Http Codec,支持Http1.0/Http1.1。我们不用再花很大的力气去除encode和decode request和response。和Netty提供的HttpServer相反,我们只需要HttpResponseDecoder和HttpRequestEncoder。我们知道Http协议都是Header-Body。Http1.0通过Content-Length的header来控制body的长度,Http1.1做了一些改进使用chunk的方式编码chunk,通过一个0长度的chunk来标识body的结束。request和response的协议都是Header-body方式的。Netty使用HttpMessageEncoder和HttpMessageDecoder来编码和解码。response和request不同的只是第一行的内容。

       都知道Netty是异步的,这样也带了一个问题,假如我同时在一个channel发送多个request,server也会有多个response过来。如果是同步的,一个请求发送到服务端然后等待response,处理完毕以后接着发送下一个request,如此反复。但是异步就不一样,他同时发送多个request到server而等待服务端的response,那这样我们怎么知道那个request和哪个response是一一对应的呢?针对每一个channel维持一个已发送队列,当发送一个request的时候同时加入到这个队列中,在收到服务端的response从队头中取出一个request即是与之对应的。这样方式看起来是合理的,但还是有潜在的隐患。这种模式和现实浏览器由很大不同,一般是一个connection一次只能用来发送一个request,而不是多个request。假设多个请求的话,服务端是多线程模型,很可能response返回的顺序和request的请求顺序是不一样的。(我的设想没有证明,也许是多虑了,各位看官觉得不对,欢迎指正)

      解决了上面说的问题,一个HttpClient没有多少代码就实现了,同时我用NettyHttpClient抓取新浪的股票数据,再用上次的Comet实现了一个股票实时推送的例子



 

  • 大小: 22.4 KB
0
0
分享到:
评论
8 楼 xiang37 2015-05-13  
兄弟,程序写好了,股票买了没?要是13年买了,那现在就赚大发了。
7 楼 xiaoZ5919 2013-04-24  
liyuanchao2004 写道
发份源码可以吗[/q加uote]  加我qq吧

405919612
6 楼 xiaoZ5919 2013-04-24  
发份源码可以吗[/q加uote]  加我qq吧
5 楼 liyuanchao2004 2013-04-24  
发份源码可以吗
4 楼 xiaoZ5919 2013-01-12  
还是有用处的!起码可以做为异步调用的场景!一个功能依赖多次请求用异步并行加载就比较合适!普通的httpclient要做到异步必须得使用多线程netty用在这儿减少线程的使用数
3 楼 小树鹿鸣 2013-01-12  
xiaoZ5919 写道
恩!断了自动补链接这个好解决,通过channel的isConnected可以判断是否断了。用transactionid维持上下文一般rpc协议设计都是这样用的。用在自己开发的服务还行第三方就不好做到了!如果把channel做成连接池每个channel每次使用只处理一个request,使用完毕以后再放入池中,你觉得这种方案呢A?

现在要解决request与response对应关系,如果做成一个池,就要额外标记channel是否正在使用,这与httpclient 维护http池又有什么区别呢? 还不如用httpclient! 总之要有适合的场景!
2 楼 xiaoZ5919 2013-01-11  
恩!断了自动补链接这个好解决,通过channel的isConnected可以判断是否断了。用transactionid维持上下文一般rpc协议设计都是这样用的。用在自己开发的服务还行第三方就不好做到了!如果把channel做成连接池每个channel每次使用只处理一个request,使用完毕以后再放入池中,你觉得这种方案呢A?
1 楼 小树鹿鸣 2013-01-11  
1.Netty客户端要想高效,就要保持长链接,断了也要自动补链接。
2.服务端是多线程模型,很可能response返回的顺序和request的请求顺序是不一样的。这是肯定的,因此不能用队列去保存,建议采用hash<transactionid:string, Request:HttpClientRequest>, 在httpheader 头部自定义transactionid参数,保证服务端处理完后,头部tansactionid能自带回来!

相关推荐

    四、JAVA调用海康威视SDK实现摄像头内网推流到阿里云

    在本项目中,我们主要探讨如何使用JAVA编程语言调用海康威视(Hikvision)的SDK,以便实现摄像头的内网预览功能,并将视频流推送到阿里云服务。这一过程涉及到多个技术栈,包括后端开发、网络通信以及云端服务的集成...

    基于cmpp2.0协议中国移动通信SP端简单小程序

    Deliver 消息在CMPP协议中是指SMSC向SP推送用户接收的短信,它包含发送方号码、接收方号码、短信内容等关键信息。对于一个SP端应用来说,正确接收并处理 Deliver 消息是保证服务正常运行的基础。 然而,该小程序...

    Android即时通讯框架

    - **WebSocket**:为实现双向实时通信,可使用WebSocket协议,它允许服务器主动推送消息给客户端,降低延迟。 4. **内外网支持**: - **NAT穿透**:内外网通信可能遇到NAT(Network Address Translation)问题,...

    游戏服务器

    这通常通过心跳包机制来实现,服务器定期发送更新到客户端,或者在状态变化时立即推送。 4. **数据存储**:游戏数据如角色信息、道具、等级等通常需要持久化存储。Java提供JDBC(Java Database Connectivity)接口...

    hhhhh安卓开发教程大全

    hhhhh安卓开发教程大全

    avem-labs_Avem_1740990015.zip

    avem-labs_Avem_1740990015.zip

    25883-mofangmall.com 微信群管理机器人系统网站.zip

    微信群机器人管理系统源码 微信群机器人管理系统源码 支持同登陆多个微信 源码类型: C/S 开发环境: VS2010 SQL2008R2 菜单功能 1、支持同时登录多个微信 2、支持机器人聊天(笑话,成语接龙、故事会、智力等等) 3、支持签到 4、可自定义回复 5、可自定义红包语 6、支持定期发送公告(如群规,广告)等 1、WeChatRobots后台配置web版 2、数据库在WeiChartGroup.Net/app_data中,附加即可

    https://upload.csdn.net/creation/uploadResources?spm=1003.2018.3001.4314

    https://upload.csdn.net/creation/uploadResources?spm=1003.2018.3001.4314

    名字微控制器_STM32_课程_DeepBlue_1740989720.zip

    名字微控制器_STM32_课程_DeepBlue_1740989720.zip

    S7-200Smart恒压供水程序示例与485通讯实践:操作指南与案例解析,S7-200 Smart可编程控制器恒压供水程序设计与实现,附带485通讯范例,S7-200Smart 恒压供水程序样例+4

    S7-200Smart恒压供水程序示例与485通讯实践:操作指南与案例解析,S7-200 Smart可编程控制器恒压供水程序设计与实现,附带485通讯范例,S7-200Smart 恒压供水程序样例+485通讯样例 ,S7-200Smart; 恒压供水程序样例; 485通讯样例,S7-200Smart程序样例:恒压供水及485通讯应用示例

    Java读写Mifare M1卡IC卡源码

    Java使用JNA、JNI两种不同方式调用DLL、SO动态库方式读写M1卡源码,支持读写M1卡扇区数据、修改IC卡扇区密钥、改写UID卡卡号等功能,支持Windows系统,同时支持龙芯Mips、LoongArch、海思麒麟鲲鹏飞腾Arm、海光兆芯x86_Amd64等架构平台的国产统信、麒麟等Linux系统,内有jna-4.5.0.jar包,vx13822155058 qq954486673

    UDP协议接收和发送数据示例JAVA

    UDP协议接收和发送数据示例JAVA

    VU-DBS项目:深脑刺激器的全程辅助

    本文介绍了范德堡大学深脑刺激器(DBS)项目,该项目旨在开发和临床评估一个系统,以辅助从规划到编程的整个过程。DBS是一种高频刺激治疗,用于治疗运动障碍,如帕金森病。由于目标区域在现有成像技术中可见性差,因此DBS电极的植入和编程过程复杂且耗时。项目涉及使用计算机辅助手术技术,以及一个定制的微定位平台(StarFix),该平台允许在术前进行图像采集和目标规划,提高了手术的精确性和效率。此外,文章还讨论了系统架构和各个模块的功能,以及如何通过中央数据库和网络接口实现信息共享。

    图像识别项目源码资源(Python和C++)

    图像识别”项目源码资源(Python和C++)

    虚拟同步电机与并电网模型的Simulink仿真参数配置与直接使用指南,虚拟同步电机与并电网模型的Simulink仿真:参数齐全,直接使用,同步电机simulink仿真 并电网模型仿真 参数设置好了

    虚拟同步电机与并电网模型的Simulink仿真参数配置与直接使用指南,虚拟同步电机与并电网模型的Simulink仿真:参数齐全,直接使用,同步电机simulink仿真 并电网模型仿真 参数设置好了,可直接使用 ,虚拟同步电机; simulink仿真; 并电网模型仿真; 参数设置; 使用,虚拟同步电机Simulink仿真与并电网模型参数化应用

    三菱FX3U与力士乐VFC-x610变频器通讯案例详解:PLC控制下的变频器操作与设置程序,含接线方式及昆仑通态触摸屏操作指南,三菱FX3U与力士乐VFC-x610变频器通讯案例详解:接线、设置与程序

    三菱FX3U与力士乐VFC-x610变频器通讯案例详解:PLC控制下的变频器操作与设置程序,含接线方式及昆仑通态触摸屏操作指南,三菱FX3U与力士乐VFC-x610变频器通讯案例详解:接线、设置与程序注解,实现频率设定、启停控制与实时数据读取功能。,三菱FX3U与力士乐VFC-x610变频器通讯程序三菱FX3U与力士乐VFC-x610变频器通讯案例程序,有注释。 并附送程序,有接线方式,设置。 器件:三菱FX3U的PLC,力士乐VFCx610变频器,昆仑通态,威纶通触摸屏。 功能:实现频率设定,启停控制,实际频率读取等。 ,三菱FX3U;力士乐VFC-x610变频器;通讯程序;案例程序;注释;接线方式;设置;频率设定;启停控制;实际频率读取;昆仑通态;威纶通触摸屏。,三菱FX3U与力士乐VFC-x610变频器通讯程序及案例:频率控制与读取实践

    xmselect测试用例~~~~~~~~~~~~~~

    xmselect测试用例~~~~~~~~~~~~~~

    Unity-游戏开发-模型资源-科幻武器

    总共包含 32 款 AAA 级科幻武器。四种武器类型,每种有 8 种不同的纹理变化! 所有内容均采用 PBR 材质,可直接用于开发游戏!

    python词云生成器,将txt文本自动分割生成词云图

    python词云生成器,将txt文本自动分割生成词云图

    基于物联网智能化平台的智慧园区解决方案PPT(28页).pptx

    智慧园区,作为现代城市发展的新形态,旨在通过高度集成的信息化系统,实现园区的智能化管理与服务。该方案提出,利用智能手环、定制APP、园区管理系统及物联网技术,将园区的各类设施与设备紧密相连,形成一个高效、便捷、安全的智能网络。从智慧社区到智慧酒店,从智慧景区到智慧康养,再到智慧生态,五大应用板块覆盖了园区的每一个角落,为居民、游客及工作人员提供了全方位、个性化的服务体验。例如,智能手环不仅能实现定位、支付、求助等功能,还能监测用户健康状况,让科技真正服务于生活。而智慧景区的建设,更是通过大数据分析、智能票务、电子围栏等先进技术,提升了游客的游玩体验,确保了景区的安全有序。 尤为值得一提的是,方案中的智慧康养服务,展现了科技对人文关怀的深刻体现。通过智慧手环与传感器,自动感知老人身体状态,及时通知家属或医疗机构,有效解决了“空巢老人”的照护难题。同时,智慧生态管理系统的应用,实现了对大气、水、植被等环境要素的实时监测与智能调控,为园区的绿色发展提供了有力保障。此外,方案还提出了建立全域旅游营销平台,整合区域旅游资源,推动旅游业与其他产业的深度融合,为区域经济的转型升级注入了新的活力。 总而言之,这份智慧园区建设方案以其前瞻性的理念、创新性的技术和人性化的服务设计,为我们展示了一个充满智慧与活力的未来园区图景。它不仅提升了园区的运营效率和服务质量,更让科技真正融入了人们的生活,带来了前所未有的便捷与舒适。对于正在规划或实施智慧园区建设的决策者而言,这份方案无疑提供了一份宝贵的参考与启示,激发了他们对于未来智慧生活的无限遐想与憧憬。

Global site tag (gtag.js) - Google Analytics