背景

有一个名为Wireshark的着名工具.我已经使用了很长时间.这很棒,但性能是问题所在.通用使用场景包括若干数据准备步骤,以便提取稍后要分析的数据子集.如果没有这一步,则需要几分钟才能进行过滤(Wireshark旁边的大痕迹无法使用).

实际的想法是创建一个更快,更平行,更高效的更好的解决方案,用作数据聚合器/存储.

要求

实际要求是使用现代硬件提供的所有电源.我应该说有一个不同类型的优化空间,我希望我在上层做得很好,但技术是现在的主要问题.根据目前的设计,有几种类型的包解码器(解剖器):

>交互式解码器:解码逻辑可以在运行时轻松更改.这种方法对协议开发人员非常有用 – 解码速度并不重要,但灵活性和快速结果更为重要
>可嵌入解码器:可以用作库.这种类型应该具有良好的性能,并且足够灵活,可以使用所有可用的cpu和内核
>解码器即服务:可以通过干净的API访问.这种类型应提供最佳的品种性能和效率

结果

我目前的解决方案是基于JVM的解码器.实际的想法是重用代码,消除移植等,但仍然具有良好的效率.

>交互式解码器:在Groovy上实现
>可嵌入解码器:在Java上实现
>解码器即服务:Tomcat优化嵌入到servlet中的嵌入式解码器(二进制输入,XML输出)

需要解决的问题

> Groovy提供了更多权力和一切的方法,但在这种特殊情况下运气表现力
>将协议解码为树结构是一个死胡同 – 太多资源被浪费掉了
>内存消耗有点难以控制.我做了几次优化但仍不满意分析结果
> Tomcat与各种铃声和口哨仍然引入了很多开销(主要是连接处理)

我在各地使用JVM做得对吗?您是否看到了实现最初目标的任何其他优秀和优雅的方法:获得易于编写的高度可扩展且高效的协议解码器?

协议,结果格式等不固定.

解决方法

我发现了几个可能的改进:

交互式解码器

通过使用Groovy语法扩展,可以大大提高Groovy表达能力
AST Transformations.因此,有可能简化解码器创作仍然提供良好的性能. AST(代表抽象语法树)是一种编译时技术.

When the Groovy compiler compiles Groovy scripts and classes,at some
point in the process,the source code will end up being represented in
memory in the form of a Concrete Syntax Tree,then transformed into an
Abstract Syntax Tree. The purpose of AST Transformations is to let
developers hook into the compilation process to be able to modify the
AST before it is turned into bytecode that will be run by the JVM.

我不想重新发明轮子引入另一种语言来定义/描述协议结构(它足以拥有ASN.1).这个想法是简化解码器开发,以提供一些快速原型技术.基本上,将引入某种DSL.

Further reading

嵌入式解码器

Java可能会引入一些额外的开销.有几个库可以解决这个问题:

> HPPC
> Trove
> Javolution
> Commons-primitives

坦率地说,除了Java之外,我没有看到任何其他选项.

解码器即服务

此层不需要Java.最后我有一个很好的选择,但价格相当高. GWan看起来真的很棒.

需要一些额外的移植,但绝对值得.

java – 二进制和文本结构(数据包)的高效解码的更多相关文章

  1. ios – 伞框架

    错误.应用程序,通常位于…错误仍然存在你也可以在这里添加(子)框架的路径.

  2. 如何在xcode 6中构建32位和64位的单二进制文件

    我已经遵循this堆栈溢出解决方案,但即使我得到低于警告.我已经选择虽然我得到了警告.请帮帮我.谢谢.解决方法有同样的问题.看起来将’arm64’添加到ValidArchitectures解决了它.

  3. ios – 将二进制文件上传到Apple的iTunesConnect时会发生什么?

    我问,因为:它可能指向我们可以做的事情来加快这个过程.大约一年前,这个过程从“缓慢,因为苹果的服务器功率不足”变得“非常缓慢,因为苹果公司使用的带宽是发送二进制文件所需带宽的3倍”.例如我最近提交了一个90Mb应用程序,Xcode4将超过350Mb的数据上传到Apple.例如刚才我提交了一个8Mb的二进制文件,Xcode4将超过40Mb的数据上传到Apple.最近上传者有了很大的改进.但我想知道:苹果在上传期间实际上做了什么?

  4. ios – 为什么我的Swift 3.0解码器decodeInteger不能用于整数?

    Int(我从其他帖子中了解到这不起作用……)那么我可能做错了什么?应该说原始值是从float中检索并转换为int.解决方法此问题是由Swift3中的多个更改引起的.在Swift3中,编码方法对于每种类型都是重载的.我们有:和编译器根据第一个参数的类型选择正确的方法.你正在把Int!那里.由于SwiftEvolution0054,Swift3中ImplicitlyUnwrappedOptionals的行为发生了变化.如果您阅读了这些更改,您可以注意到将IUO转换为常规可选项比打开包装更受欢迎,因此转换为An

  5. ios – iTunes Connect警告:“您的二进制文件不支持iPad”

    我刚刚将一个新的二进制文件上传到iTunesConnect,并将其添加到iOS版本的新版本.添加二进制文件并保存更改后,iTunesConnect会显示警告消息:“您的二进制文件不支持iPad,iPad的屏幕截图或应用视频预览将不会显示在AppStore上.”Xcode项目是使用Cordova3CLI生成的;自从应用从Cordova2迁移以来,上传的二进制文件是第一个Cordova3版本.该应用程

  6. ios – 二进制无效,二进制文件缺少体系结构[arm64]

    没有足够的信誉发布图像,请搜索“TimT”作为他的回复.更新:已经修复“是的,最近有一个修复程序应用于服务器,每个人都应该能够再次提交32位应用程序.–由TimT在同一个线程.我再次尝试,一切都很好.

  7. ios – 不能检查CGPoint是否不等于CGPointZero

    我有一个CGPoint在UIView类中声明,在我的viewController中,我尝试检查CGPoint是否不等于CGPointZero,但是我收到这个错误:二进制表达式(‘CGPoint'(又名’structCGPoint’)’和’CGPoint“)这是if语句:错误指向!=和我不知道为什么它给我一个错误.操纵杆是UIView类,CGPoint速度是这样声明的:@property(非原子)C

  8. 通用定制iOS框架使用Xcode 6.4

    我已经使用Xcode6创建了一个自定义的iOS框架.我尝试了许多脚本来使框架通用(用于模拟器和设备).但是它们都不适用于我.请告诉我一种方法来为iOS创建一个自定义的通用框架Xcode6.解决方法要通过终端将两个二进制文件合并成通用二进制文件:首先编译器件二进制,然后分别编译模拟器二进制.找到这两个二进制文件.如果你想检查哪些架构被编译成每个,你可以在终端中运行这个命令:lipo-info/pat

  9. ios – 您的二进制文件专为iPad Pro设计.上传iPad Pro截图以获得更好的App Store体验警告

    在将应用程序提交到应用程序商店进行审核后,我在iTunesConnect中收到了以下警报.我没有看到在iTunesConnect.中上传iPadPro屏幕截图的选项请告诉我这里可以做些什么.解决方法是的,这是苹果方面的错误.我已经提交了我的应用程序此错误,Apple批准了该应用程序.

  10. ios – 可变形和二进制数据之间有什么区别?

    我最近开始研究核心数据,请任何人告诉我可变数据和二进制数据之间的区别.我需要将myClassObject存储在核心数据中.我创建了属性并将其类型定义为二进制数据,但在存储时我收到错误.解决方法使用二进制属性,可以直接读取和写入NSData的实例.使用可转换属性,您可以读取和写入可以转换为NSData的任何类的实例.实际数据存储与二进制属性相同,但是CoreData使用NSValueTransfor

随机推荐

  1. 基于EJB技术的商务预订系统的开发

    用EJB结构开发的应用程序是可伸缩的、事务型的、多用户安全的。总的来说,EJB是一个组件事务监控的标准服务器端的组件模型。基于EJB技术的系统结构模型EJB结构是一个服务端组件结构,是一个层次性结构,其结构模型如图1所示。图2:商务预订系统的构架EntityBean是为了现实世界的对象建造的模型,这些对象通常是数据库的一些持久记录。

  2. Java利用POI实现导入导出Excel表格

    这篇文章主要为大家详细介绍了Java利用POI实现导入导出Excel表格,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  3. Mybatis分页插件PageHelper手写实现示例

    这篇文章主要为大家介绍了Mybatis分页插件PageHelper手写实现示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  4. (jsp/html)网页上嵌入播放器(常用播放器代码整理)

    网页上嵌入播放器,只要在HTML上添加以上代码就OK了,下面整理了一些常用的播放器代码,总有一款适合你,感兴趣的朋友可以参考下哈,希望对你有所帮助

  5. Java 阻塞队列BlockingQueue详解

    本文详细介绍了BlockingQueue家庭中的所有成员,包括他们各自的功能以及常见使用场景,通过实例代码介绍了Java 阻塞队列BlockingQueue的相关知识,需要的朋友可以参考下

  6. Java异常Exception详细讲解

    异常就是不正常,比如当我们身体出现了异常我们会根据身体情况选择喝开水、吃药、看病、等 异常处理方法。 java异常处理机制是我们java语言使用异常处理机制为程序提供了错误处理的能力,程序出现的错误,程序可以安全的退出,以保证程序正常的运行等

  7. Java Bean 作用域及它的几种类型介绍

    这篇文章主要介绍了Java Bean作用域及它的几种类型介绍,Spring框架作为一个管理Bean的IoC容器,那么Bean自然是Spring中的重要资源了,那Bean的作用域又是什么,接下来我们一起进入文章详细学习吧

  8. 面试突击之跨域问题的解决方案详解

    跨域问题本质是浏览器的一种保护机制,它的初衷是为了保证用户的安全,防止恶意网站窃取数据。那怎么解决这个问题呢?接下来我们一起来看

  9. Mybatis-Plus接口BaseMapper与Services使用详解

    这篇文章主要为大家介绍了Mybatis-Plus接口BaseMapper与Services使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  10. mybatis-plus雪花算法增强idworker的实现

    今天聊聊在mybatis-plus中引入分布式ID生成框架idworker,进一步增强实现生成分布式唯一ID,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

返回
顶部