在介绍DataXceiverServer线程之前首先介绍一下,DN启动后一直执行的线程(也就是服务线程)哪些。首选DN本身就是一个线程类,该线程必然会一直执行。在DN的run方法中
1432 // start dataXceiveServer
1433 dataXceiverServer.start();
1434 ipcServer.start();
可以看出会启动一个DataXceiverServer类型的线程,这个线程的主要作用是什么呢,这就是本篇博客要讲述的重点。另外我们还可以看到ipcServer的线程,这个就是前边博客中介绍的RPC机制中的Server线程,负责处理RPC请求,这些请求来在DN之间,貌似在进行recovery的时候使用,具体没有搞清楚。
下边开始DataXceiverServer线程类的主要功能,
43 class DataXceiverServer implements Runnable, FSConstants {
46 ServerSocket ss;
47 DataNode datanode;
看以看出DataXceiverServer也是一个线程类,其中两个比较重要的成员变量是一个ServerSocket对象和DataNode对象本身,其中ServerSocket就是DN负责接收socket连接的对象。我们来看一下这个类最核心的部分,也就是run方法
128 public void run() {
129 while (datanode.shouldRun) {
130 try {
131