APIList

아래는 Skynet 현재 제공하는 루이 모듈의 모든 API 리스트이다. 상세내용은 보충해야 한다

skynet LuaAPI

서비스구성에 필요한 API:

  • register_protocol(class) 현재서비스내에 메시지 처리 메커니즘 등록
  • start(func) func 함수로 서비스초기화하고,메시지처리함수를 C층에 등록하여 서비스가 동작하도록함
  • init(func) 서비스가 초기화되지 않았다면, 함수를 등록하여 서비스초기화 단계를 다시 실행하고, 서비스 초기화가 이미 완료되었다면, 바로 이함수를 실행한다. TODO 테스트 해보자 무슨말일까
  • dispatch(type, func) type 형식의 메시지 처리함수 설정
  • getenv(key) 현재 프로세스내의 등록표의 항목을 리턴
  • setenv(key,value) 현재 프로세스내 등록표에 항목추가 (중복설정불가)
  • memlimit(bytes) 현재서비스가 사용할수 있는 최대 메모리바이트수설정,이 함수는 start함수 실행전에 수행되어야함.

프레임워크구성에필요한 API:

  • newservice(name, …) 이름이 name인 새로운서비스 기동.
  • uniqueservice(name, …) 하나의 유일한 서비스 기동,만약 이미 기동되었다면, 기동중인 서비스의 주소를 리턴한다.
  • queryservice(name) uniqueservice 로 기동된 서비스의 주소 조회, 서비스가 미기동이면 기다린다.
  • localname(name) 동일한프로세스내,register 로 등록한 서비스의 주소를 리턴

작업스케쥴러와 자신컨트롤 API:

  • sleep(time) 현재작업이 time * 0.01s 동안 기다림.
  • yield() 현작업실행양보,본 서버내 다른 작업에 실행할 기회를 준후, 계속실행.
  • wait() wakeup 을 사용해서 깨울때까지, 현재 작업 프로세스를 기다리게한다
  • wakeup(co) wait 나 sleep 으로 기다림상태의 작업을 깨운다.
  • fork(func, …) 새로운 작업을 기동하여 함수 func 을 실행함
  • timeout(time, func) time * 0.01초 이후 실행되는, 일정시간이후 실행되는 함수 func 설정
  • starttime() 현재 프로세스의 기동시작 UTC 시간(초) 리턴
  • now() 현재프로세스의 기동후 지나간시간을 리턴 0.01초
  • time() startTime 과 now 로 계산한 현재 UTC시간 (단위는 초, 정밀도는 ms).
  • address(addr) 서비스의 주소를 표시할수있는 문자열로 변환합니다
  • self() 현재서비스의주소를 반환
  • exit() 현재서비스를 종료

상태조회API:

  • info_func(func) 내부 상태조회 함수 등록하여, debug 프로토콜 호출 제공
  • stat(what) 현재서버의 내부상태 조회,what 은 아래 리스트가될수 있다.
    • endless cpu 의 상태가 장기간 점용상태여부
    • mqlen 처리되지않은 메시지의 수
    • message 이미처리한 메시지의수
    • cpu CPU 점용 합계시간

메시지전달 API:

  • call(addr, type, …) type 유형의 메시지를 addr 로 보내고, 상대방의 응답을 기다린디.
  • send(addr, type, …) addr 에 type 유형의 메시지를 전송.
  • redirect(addr, source, type, …) source 주소로 위장해서서 addr 로 메시지 전송.
  • ret(msg, sz) 현재 작업의 요청지에 패킹완료된 메시지를 응답한다.
  • retpack(…) 메시지를 pack 으로 패킹하고,ret 을 호출하여 응답한다.
  • response([packfunc]) 한 개의 응답함수를 생성한여, 현재의 작업의 장래의 응답에 사용한다 메시지가 기본 lua 형식이 아닐경우 대응하는 메시지 패킹 함수를 제공해야 한다.
  • error(msg) 로그서비스로 메시지를 전송함
  • pack(…) 기본 lua 형식 메시지 패킹, 내부 호출용 포인터와 길이를 반환한다
  • packstring(…) 기본 Lua 형식으로 메시지를 패킹하고, lua 문자열을 리턴함.
  • unpack(msg [, sz]) pack 이나 packstring 으로 패킹한 메시지를 언패킹함,sz가없으면 msg 는 lua 문자열 이여야한다.
  • tostring(msg, sz) 한 개의 포인터와 길이로 정의된 메시지를 문자열로 전환한다

특별한 필요나가 있을경우 사용, 의미를 명확히 알고 사용해야하는 API:

  • harbor(addr) 서버주소가 어떠한 노드에 위치하고있는지 조회.
  • rawsend(addr, type, msg, sz) type 유형을 사용하여 addr 에 패킹된 메시지를 발송.
  • rawcall(addr, type, msg, sz) type 유형을 사용하여 addr 을 향해 한 개의 패킹된 메시지발송, 그리고 상대방의 응답을 기달림, 하지만 응답패킷을 언팩하지 않음

  • trash(msg, sz) 한 개의 포인터와 길이로 정의된 메시지패키지 소각
  • dispatch_unknown_request(func) 처리불가능한 메시지유형을 위한 처리함수를 설정.
  • dispatch_unknown_response(func) 처리불가능한 응답메시지 처리를 위한 함수 설정.

내부사용이나 호환목적으로 존재하는 API:

  • genid() 유일한 세션생성
  • dispatch_message(typeid, msg, sz, session, source) 기본메시지처리과정, C층으로 전달하는 5개의 파라매터: 메시지종류id, 포인터,길이,세션번호, 메시지발원지.
  • pcall(func, …) 한개의 함수를 실행, 예외를 잡아내고, init으로 등록된 초기화 과정이 함수 호출전에 진행되는는 것을 보장한다
  • init_service(func) func 함수를 사용해서 서비스 초기화
  • endless() 현재 서비스의 현재 작업이 CPU를 장기 점유 상태인지 조회
  • mqlen() 현재서비스에 몇 개의 메시지가 미처리인지 조회
  • task(result) 현재서비스의 처리 완료되지않은 작업의 호출스택정보를리턴
  • task() 처리미완료의 작업갯수 리턴
  • task(“init”) 초기화 미완료의 호출스택 정보 반환
  • task(session) session 대응의 직압의 호출스택정보 리턴
  • term(source) source 의 서비스가 이미 종료되었다고 가정함

Skynet.manager 추가로 인한 신규 API ,호환목적과 프레임워크구성을 위해 존재함:

  • launch(name, …) C 서비스를 직접 기동한다.
  • kill(addr) 서비스를 강제로 종료한다
  • abort() skynet 프로세스 종료
  • register(name) 현재서비스에 문자열이름을 부여한다
  • name(name, address) address 에 해당하는서비스에 이름을 정한다.
  • forward_type(map, start_func) 현재 서비스에 메시지전달 목적의 메시지처리 함수를 등록한다
  • filter(filter_func, start_func) 현재 서비스에 메시지처리 함수를 등록한다,그리고 모든 메시지에 대해 필터함수를 등록한다.
  • monitor(address) 전역 서비스 감시 서비스를 등록한다,이서비스는 모든서비스의 종료이벤트를 감시한다

skynet.cluster Cluster

  • call(node, address, …) 특정 노드의 특정 서비스에 요청후, 응답을 기다린다
  • send(node, address, …) 특정 노드의 특정 서비스에 메시지를 푸쉬한다.
  • open(port) 현재 노드가 특정포트를 리슨하도록 한다.
  • reload([config]) 현재 노드의 네트워크 설정을 재로드한다,파일설정대신 config 표를 제공할수있다.
  • proxy(node, address) 원격 노드의서비스에 대해 로컬프록시 생성.
  • snax(node, name, address) 원격 노드상의 snax 서비스에 대해 로컬프록시 만들기
  • register(name, address) 현재 노드의 서비스에 이름 부여,이후이름으로 주소획득가능
  • query(node, name) 원격 노드상 이름으로 대응하는 주소조회.

skynet.coroutine Coroutine

Skynet 프레임워크에 맞추기위해 루아 기본 coroutine 라이브러리대신사용. 새로추가된 API 는 다음과같음:

  • thread(co) coroutine 속성의 skynet 작업을 반환.

skynet.codecache CodeCache

skynet.profile Profile

skynet.datacenter DataCenter

skynet.harbor Cluster

skynet.multicast Multicast

skynet.queue CriticalSection

skynet.sharedata ShareData

skynet.socket Socket

skynet.dns Socket

skynet.socketchannel SocketChannel

보충필요:

skynet.request https://github.com/cloudwu/skynet/blob/master/test/testselect.lua

skynet.db.redis

skynet.db.mongo

skynet.db.mysql

bson

sproto

skynet.crypt

skynet.datasheet

http

출처: https://github.com/cloudwu/skynet/wiki/APIList