采样器地址为src.protocol.tcp.sampler

1.结构图

还有两个文件

  • ReadException:响应的异常,举例子就是服务端发生读取文本的问题,会产生异常
  • TCPSampler:采样器的具体实现

2.方法理解

2.1、TCPClient.java

 //在线程启动时调用
void setupTest(); //在线程结束时调用
void teardownTest(); //抛出异常
void write(OutputStream os, InputStream is) throws IOException;
void write(OutputStream os, String s) throws IOException; //返回一个从socket中读出的String(v3.3后已经过时)
String read(InputStream is) throws ReadException; //返回一个从socket中读出的String
String read(InputStream is, SampleResult sampleResult) throws ReadException; //获取行尾消息尾字节+返回
byte getEolByte(); //字符集
String getCharset(); //设置行尾/消息尾的字节,如果值超过了一个字节,就会被忽略
void setEolByte(int eolInt);

2.2、AbstractTCPClient.java

 private String charset;            //字符集
protected byte eolByte; //消息尾的
protected boolean useEolByte = false; //判定行尾字节是否超过限制的flag public byte getEolByte(){} public void setEolByte(int eolInt){} public void setupTest(){}
public void teardownTest(){} public void setCharset(String charset){} //设置字符集 //返回一个从socket中读出的String
public String read(InputStream is, SampleResult sampleResult) throws ReadException{}

2.3、BinaryTCPClientImpl.java

 //日志
private static final Logger log = LoggerFactory.getLogger(BinaryTCPClientImpl.class); //EOM字节由属性“tcp.BinaryTCPClient.eomByte”定义,默认值1000
private static final int EOM_INT = JMeterUtils.getPropDefault("tcp.BinaryTCPClient.eomByte", 1000); // $NON_NLS-1$ //构造函数,设置消息尾的字节,没超过限制的话写入日志
public BinaryTCPClientImpl(){} //把十六进制字符串转换成二进制字节数组
public static byte[] hexStringToByteArray(String hexEncodedBinary){} //输入十六进制字符串通过hexStringToByteArray()转换成二进制数组,写入输出流。
public void write(OutputStream os, String hexEncodedBinary) throws IOException{} //方法不支持过长的前缀?
public void write(OutputStream os, InputStream is){} //过时的方法,警告写入日志,自动进入新方法read(InputStream is, SampleResult sampleResult)
public String read(InputStream is) throws ReadException{} //***
//读数据直到碰到EOM byte,没有这个的话一直读到流结束
public String read(InputStream is, SampleResult sampleResult) throws ReadException{}

2.4、TCPClientImpl.java

 //日志
private static final Logger log = LoggerFactory.getLogger(TCPClientImpl.class); //EOl字节由属性“tcp.eolByte”定义,默认值1000
//charset由属性“tcp.charset”定义
private static final int EOL_INT =
JMeterUtils.getPropDefault("tcp.eolByte", 1000);
private static final String CHARSET =
JMeterUtils.getPropDefault("tcp.charset", Charset.defaultCharset().name()); //构造函数
public TCPClientImpl(){} //字符集写入流
public void write(OutputStream os, String s) throws IOException{
os.write(s.getBytes(CHARSET));
} //输入流的缓冲区有东西,就写到输出流中
public void write(OutputStream os, InputStream is) throws IOException{} //方法过时
public String read(InputStream is) throws ReadException{} //读数据直到碰到EOl byte,没有这个的话一直读到流结束
public String read(InputStream is, SampleResult sampleResult) throws ReadException{} //组装显示
private String showEOL(final String input){}

2.5、TCPClientDecorator.java

 //把int数组转换成byte数组
public static byte[] intToByteArray(int value, int len){} //把byte数组转换成int数组
public static int byteArrayToInt(byte[] b){}

2.6、LengthPrefixedBinaryTCPClientImpl.java

 //构造函数
public LengthPrefixedBinaryTCPClientImpl(){} //byte数组写入输出流
public void write(OutputStream os, String s) throws IOException{} //写入输出流
public void write(OutputStream os, InputStream is) throws IOException //过时方法
public String read(InputStream is) throws ReadException{} //
public String read(InputStream is, SampleResult sampleResult) throws ReadException{}

TCPClient classname:

有三种设置格式

TCPClientImpl:文本数据。

BinaryTCPClientImpl:传输二进制数据,指定包结束符。

LengthPrefixedBinaryTCPClientImpl:数据包中前2个字节为数据长度。
可在bin/jmeter.properties配置文件中tcp.binarylength.prefix.length设置。

TCP的数据以二进制之类的居多,所以为了方便则选择第二个进行设置。

所以填写org.apache.jmeter.protocol.tcp.sampler.BinaryTCPClientImpl

先选用org.apache.jmeter.protocol.tcp.sampler.TCPClientImpl

**GUI对应表
**Name**:在查看结果树中用于区分元素。保留,使用。
**TCPClient classname**:最终选择的实现TCPClient的实现类,默认先去查看 tcp.handler,没有的话默认选择TCPClientImpl,当前只写一种方法,以防后续变更。保留,不使用。
**ServerName or IP(必需)**:TCP服务端的IP。
**Port Number(必需)**:服务端要使用的端口号。
**Re-use connection(必需)**:选中则代表这个连接将会保持开启,知道数据读完才会关闭。默认开启
**Close connection**:选中则代表连接在采样器运行完之后关闭。默认关闭
**Set NoDelay**:选中则禁用Nagle算法(禁用适用于需要实时预览的通讯程序),nagle算法用于处理小报文段(微小分组)的发送。保留,程序内写死不禁用。
**SO_LINGER**:在创建socket时,启用/禁用指定的挂起时间(以秒为单位)。可以将“SO LINGER”值设置为0,则可以防止大量套接字处于时间等待状态。保留,程序内写死设置为0。
**End of line(EOL) byte value**:结束读取的值,设置在-128~127之外,以跳过EOL检查。保留,不设置。
**Connect Timeout**:连接时延,不设置。
**Response Timeout**:回复时延,不设置。
**Text to Send(必需)**:要发送的文本。
**Login User**:删除
**Password**:删除

【Jmeter源码解读】003——TCP采样器代码解析的更多相关文章

  1. 【Kafka 源码解读】之 【代码没报错但是消息却发送失败!】

    聊聊最近,2020年,在2019年的年尾时,大家可谓对这年充满新希望,特别是有20200202这一天.可是澳洲长达几个月的大火,新型冠状病毒nCoV的发现,科比的去世等等事情,让大家感到相当的无奈,生 ...

  2. 16.Spark Streaming源码解读之数据清理机制解析

    原创文章,转载请注明:转载自 听风居士博客(http://www.cnblogs.com/zhouyf/) 本期内容: 一.Spark Streaming 数据清理总览 二.Spark Streami ...

  3. go语言nsq源码解读九 tcp和http中channel、topic的增删

    通过前面多篇文章,nsqlookupd基本已经解读完毕了,不过在关于channel和topic的增删上还比较模糊,所以本篇将站在宏观的角度来总结一下,tcp.go和http.go两个文件中关于chan ...

  4. go语言nsq源码解读六 tcp.go、tcp_server.go

    本篇讲nsqlookupd中tcp.go.tcp_server.go tcp_server.go位于util目录下. 12345678910111213141516171819202122232425 ...

  5. 【Jmeter源码解读】001——目录结构

    1.顶层目录 bin - 包含.bat 和 . sh 这些文件用于启动JMeter.同时也包含了ApacheJmeter.jar 和 相关的配置文件 build - build 脚本创建的目录,存放一 ...

  6. 【Jmeter源码解读】002——程序入口类NewDriver.java

    1.运行环境的检查 2.刚才初始化的 classloader 加载类 org.apache.jmeter.JMeter 然后通过 java 反射的方式来调用 org.apache.jmeter.JMe ...

  7. jvm源码解读--03 常量池的解析ConstantPool

    先看bt栈 (gdb) bt #0 ConstantPool::allocate (loader_data=0x7fe21802e868, length=87, __the_thread__=0x7f ...

  8. go语言 nsq源码解读三 nsqlookupd源码nsqlookupd.go

    从本节开始,将逐步阅读nsq各模块的代码. 读一份代码,我的思路一般是: 1.了解用法,知道了怎么使用,对理解代码有宏观上有很大帮助. 2.了解各大模块的功能特点,同时再想想,如果让自己来实现这些模块 ...

  9. go语言nsq源码解读八 http.go、http_server.go

    这篇讲另两个文件http.go.http_server.go,这两个文件和第六讲go语言nsq源码解读六 tcp.go.tcp_server.go里的两个文件是相对应的.那两个文件用于处理tcp请求, ...

随机推荐

  1. 配置apt源

    vim /etc/apt/source.list 配置完成后执行 apt update apt upgrade 配置完源之后,就可以在源中所有想要的包 apt search xxx 本地自带的源配目录 ...

  2. Doki Doki Literature Club ZOJ - 4035

    Doki Doki Literature Club ZOJ - 4035 题解:其实就是简单排序输出就没了. #include <cstdio> #include <cstring& ...

  3. nginx 部署php

    一:nginx安装: yum install nginx 安装完成即可,在/usr/sbin/目录下是nginx命令所在目录,在/etc/nginx/目录下是nginx所有的配置文件,用于配置ngin ...

  4. bash基础之三配置文件

    一.shell的两种登录方式: 1.交互式登录:(1)直接通过终端输入账号密码登录(2)使用“su - UserName” 或“su -l Username”切换的用户执行顺序:/etc/profil ...

  5. VSCode-VUE模板文件

    编辑自己的代码片段 ctrl+shift+p 输入snippet 选择 'Preferences: Configure User Snippets' 输入vue 选择vue.json,会打开vue.j ...

  6. 论好的代码习惯的养成/做一个优雅的coder

    1.先说一下以前被滴滴大佬教育的事情: 以前写代码的时候,因为只需要取特定的几个字段,所以经常这么写 //Request $request for example $parameters = $req ...

  7. protected-broadcast 规范使用系统应用组件自定义广播

    1. protected-broadcast 规范使用系统应用组件自定义广播 参考:https://blog.csdn.net/TaylorPotter/article/details/7019424 ...

  8. 移动端BI的设计

    在移动化.大数据浪潮的今天,基于数据做决策应该是每一家公司的标配:每家公司都有专门负责数据的人,也都应该有一个BI部门.而移动BI,基于手机端随时随地进行数据查询和分析——更是BI中不可或缺的一部分. ...

  9. JAVA-开发构建Gradle项目安装使用教程

    一.简介: Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化构建开源工具.它使用一种基于Groovy的特定领域语言(DSL)来声明项目设置,目前也增加了基于Kotl ...

  10. JAVA 基础编程练习题17 【程序 17 猴子吃桃问题】

    17 [程序 17 猴子吃桃问题] 题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个 第二天早上又 将剩下的桃子吃掉一半,又多吃了一个.以后每天早上都吃了前一天剩下的一 ...