小编Ren*_*nov的帖子

Shell脚本常用模板

数百万开发人员编写shell脚本来解决各种类型的任务.我使用shell脚本来简化部署,生命周期管理,安装或简单地作为粘合语言.

我注意到的是没有人真正关心shell脚本的风格和质量.很多团队花了很多时间修复Java,C++,...样式问题,但完全忽略了shell脚本中的问题.顺便说一句,通常没有标准的方法来在特定项目中实现shell脚本,因此可以在代码库中找到许多不同的,丑陋的和错误的脚本.

为了在我的项目中克服这个问题,我决定创建一个通用且足够好的shell脚本模板.我会按原样提供我的模板,以使这个问题更有用.开箱即用的这些模板提供:

  • 命令行参数处理
  • 同步
  • 一些基本的帮助

参数处理:getopts(最新版本:shell-script-template @ github)

#!/bin/bash
# ------------------------------------------------------------------
# [Author] Title
#          Description
# ------------------------------------------------------------------

VERSION=0.1.0
SUBJECT=some-unique-id
USAGE="Usage: command -ihv args"

# --- Options processing -------------------------------------------
if [ $# == 0 ] ; then
    echo $USAGE
    exit 1;
fi

while getopts ":i:vh" optname
  do
    case "$optname" in
      "v")
        echo "Version $VERSION"
        exit 0;
        ;;
      "i")
        echo "-i argument: $OPTARG"
        ;;
      "h")
        echo $USAGE
        exit 0;
        ;;
      "?")
        echo "Unknown option $OPTARG" …
Run Code Online (Sandbox Code Playgroud)

bash shell

55
推荐指数
4
解决办法
7万
查看次数

二进制和文本结构(数据包)的高效解码

背景

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

在此输入图像描述

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

要求

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

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

结果

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

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

需要解决的问题

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

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

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

java decode network-protocols

7
推荐指数
1
解决办法
1650
查看次数

标签 统计

bash ×1

decode ×1

java ×1

network-protocols ×1

shell ×1