JMeter 源码解读 [8] - BeanShell Server
上一次在分析 JMeter 核心类的时候 (http://markshao.github.io/2019/03/07/jmeter/) 讲到了无论是单机还是分布式模式下都会调用 startOptionServer
, 我们来看一下到底是启动了那个server
startOptionServer
的逻辑很简单,先简单看一眼
1 | private void startOptionalServers() { |
核心的逻辑就是现在配置文件中读取相关 beanshell
的配置文件,然后调用Runnable t = new BeanShellServer(bshport, bshfile);
来启动一个BeanShell服务
什么是BeanShell
呢,它的官方介绍在这里 http://www.beanshell.org/bshservlet.html,总结下来就是一个 Java Runtime 的一个hook服务,提供类似 oo 的 script 脚本作为interface和外部交互,实际的作用就是可以用来对于 runtime 的 jvm 做一些动态的挑战,例如获取一些jmeter中的变量,或者修改一些变量来改变最后的JMeter 的运行行为等
BeanShellServer
是一个对于 beanshell 服务的封装,它实现了Runnable
接口,但是从startOptionServer
的代码里来看,没看到有 Thread 的调用
1 | Runnable t = new BeanShellServer(bshport, bshfile); |
我们在BeanShellServer
中的run
函数看到,它是通过反射来调用bsh
的服务,可能在这里会有一个 thread 的处理吧
1 | Class<?> interpreter = loader.loadClass("bsh.Interpreter");//$NON-NLS-1$ |