깽쟈
491
2018-04-11 11:38:29
3
825

소켓 열어놓은 시스템을 어떻게 찾아야 할까요?


안녕하세요, 취미로 프로그래밍 하는 사람입니다.


저는 다음과 같은 시스템을 구현하고자 하는데요.


A 시스템에서 BOT 프로그램을 실행하면 해당 BOT은 소켓을 열어놓고 대기상태가 됩니다.

B 시스템에서도 BOT 프로그램을 실행하고 대기상태가 됩니다.

그렇게 n개의 시스템에서 BOT 프로그램을 실행하고 대기상태가 됩니다.


사용자가 HANDLER 프로그램을 실행합니다.

특정 태스크를 수행하는 명령어를 HANDLER에 내립니다.

HANDLER는 네트워크 영역 안에 있는 BOT을 찾아서 대기중인 BOT에 해당 태스크를 수행할 수 있도록 명령을 내립니다.

대기중인 BOT 중 하나가 특정 태스크를 수행하고 결과를 HANDLER에 통보하여 줍니다.


여기서 저의 고민은 대기중인 BOT을 어떻게 파악하느냐 입니다.

다음과 같이 고민해봤는데요,


1. BOT이 실행하면서 DB에 자신의 IP와 PORT를 저장한다. BOT이 종료하면 DB에 해당 데이터를 삭제한다. 이후 HANDLER는 DB 안의 내용으로 BOT을 파악한다.

2. UDP를 이용하여 네트워크 영역의 모든 IP를 돌며 지정한 포트로 뭔가를 쏴 BOT의 존재여부와 상태를 파악한다.


사용언어는 파이썬입니다. 참고할만한 사이트나 조언 남겨주시면 감사하겠습니다.

0
  • 답변 3

  • 김룰룰룰
    633
    2018-04-11 12:15:30

    봇|봇|봇|봇|봇 <-----> 서버 <------> 봇_관리자

    0. 서버는 고정 아이피 도메인으로 항상 운영해야 함.
    1. 봇이나 관리자는 아무때나 접속/이탈
    2. 봇 관리자는 자기가 원하는 때에 서버에 접속해서 봇 현황을 알 수 있다.

  • Celsius
    630
    2018-04-11 12:42:11

    특별한 경우가 아닌이상 네트워크 구성은 클라이언트(다)-서버(1) 구조로 하는게 여러모로 유리합니다.

    Handler 라는 프로그램을 서버로 두시고 (소켓 오픈)

    bot 프로그램 실행시 Handler 프로그램에 소켓 접속하는 구조로 구성해보세요.

    Handler도 여러개라고 하시면 신호 전달을 맡아줄 서버를 하나 만드시구요.


    현재구조는 p2p 방식에 가깝습니다.

    이 구조의 문제점은 bot 프로그램이 설치된 컴퓨터에 ip가 외부접근이 가능해야된다는 것입니다.

    단순하게 사설망 내에서만 돌릴것이라면 1번 방법도 유효합니다.

    2번 방법은 네트워크의 broadcast 이라는 개념을 이용하시면 됩니다.



  • 깽쟈
    491
    2018-04-11 13:22:30
    역시 서버를 두어야 하는군요. 두 고수님의 답변 감사드립니다.
  • 로그인을 하시면 답변을 등록할 수 있습니다.