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