서버 프로세스에 signal
이 들어오면 연결된 클라이언트들에게 종료 프로토콜을 보내고 안정적으로 종료시켜야 할 필요성을 느꼈다.
시그널 핸들러에 들어갈 수 있는 인자는 시그널 숫자인 int
형 하나만 들어갈 수 있다. 그래서 보통 전역변수를 이용해서 서버를 종료시키기 위한 값을 설정해서 종료시킨다.
하지만 싱글톤(Singleton)
이라는 기법을 이용하면 전역변수가 없어도 어디서든 접근할 수 있는 객체를 만들 수 있다. 그리고 그 객체는 무조건 하나만 존재할 수 있다.
유지보수에 좋을지 모르겠지만 궁금하니까 한번 써보자!
…
signal
이 들어와서 종료시켜야할 때 목표는 2가지다.
Server
객체의 status
를 off 시켜서 false로 만든 다음 루프문을 빠져나오게 한다. 그렇게 소멸자를 통해 서버를 안정적으로 종료시키는 것이다.싱글톤 객체에 Server
객체에 접근할 수 있는 포인터를 담아서 어디서든 Server
객체에 접근할 수 있게 하면 된다. Server
객체가 Protocol
객체에도 접근할 수 있으므로 프로토콜도 보낼 수 있다.
그렇게 만든 Singleton class
는 아래와 같다.
Server 포인터를 담을 수 있는 Singleton class의 모습
getInstance()
라는 static
멤버함수 안에 Singleton
객체를 static
으로 선언했다. 프로세스 생성 초기에 Singleton
객체가 생성되고 언제든 이 static
멤버함수를 호출하면 사용할 수 있다.