LWM2M은 CoAP을 이용하여 통신을 한다.
전에 글에도 쓴 것 처럼 Leshan은 Californium 이라는 CoAP Open source를 사용한다.
CoAP 기반 통신만을 사용하려면 Californium core만 사용하면 쉽게 사용할 수 있다.
대부분의 기능은 Leshan에서 제공하는 기능을 사용하면 구현이 된다.
그래도 간혹 필요한 기능을 구현하기 위하여 CoAP core도 건들 필요가 있다.
Ping test 기능 구현이 그 중 하나였다.
#Ping test
임베디드 장치에서 Ping을 넣어달라는 요청은 항상 있다.
서버 입장에서는 데이터가 안온다면 장치와 네트워크 연결이 되어있는지, 속도는 얼마나 나오는지 궁금하기 때문이다.
이를 위해 규격서에는 항상 Ping test 항목이 포함되어 있다.
임의의 CoAP message를 날려 응답까지 걸리는 시간을 계산하여 Ping을 구현할 수도 있다.
하지만 Californium에 이미 Ping 함수가 존재하기 때문에 굳이 복잡하게 하지 않아도 된다.
일단 서버에서 이 Ping test를 수행 할 Execute Resource를 만들어준다.
그리고 해당 클래스의 ExecuteResponse에서 Ping을 구현해주어야 한다.
이때, LWM2M과 무관하게 임시로 사용할 CoAP Client를 하나 더 만들어준다.
만들어진 클라이언트에서 Ping 함수를 호출해주면 된다.
이렇게 ping을 원하는 만큼 반복하도록 하면 된다.
그리고 시작시간과 종료시간을 기록하여 얼마나 시간이 걸렸는지 측정한다.
그러면 다음과 같은 코드가 된다.
switch(resourceid)
{
case 4:
System.out.println("PingTest start");
CoapClient clientPing = new CoapClient("coap://127.0.0.1:5683");
long beforeTime;
long afterTime;
long diffTime = 0;
long totalTime = 0;
long resTime;
int success = 0;
for(int i=0; i<4; i++)
{
beforeTime = System.currentTimeMillis();
if(clientPing.ping(1000))
{
success++;
afterTime = System.currentTimeMillis();
diffTime = afterTime - beforeTime;
totalTime += diffTime;
System.out.println("CoAP Ping " + diffTime + "ms ");
}
else
{
System.out.println("CoAP Ping Fail Count " + i);
}
try {
Thread.sleep(1000 - diffTime);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(success != 0) resTime = totalTime / success;
else resTime = 0;
System.out.println("=======================");
System.out.println("CoAP Ping Result :");
System.out.println("Success : " + success + " Avg : " + resTime + " ms");
return ExecuteResponse.success();
default:
return super.execute(identity, resourceid, params);
}
이제 서버를 열어 Execute를 하면 Ping이 수행된다.
'LWM2M' 카테고리의 다른 글
Leshan LWM2M - Object 생성 (0) | 2020.08.21 |
---|---|
Leshan LWM2M - Object xml 작성 (0) | 2020.08.19 |
Leshan LWM2M (0) | 2020.08.17 |