스카이넷서버를 시작하려면 설정파일이 필요하다. Examples/config 를 참고하자. 여기에 기본샘플이있다.

root = "./"
thread = 8
logger = nil
harbor = 1
address = "127.0.0.1:2526"
master = "127.0.0.1:2013"
start = "main"	-- main script
bootstrap = "snlua bootstrap"	-- The service for bootstrap
standalone = "0.0.0.0:2013"
luaservice = root.."service/?.lua;"..root.."test/?.lua;"..root.."examples/?.lua"
lualoader = "lualib/loader.lua"
snax = root.."examples/?.lua;"..root.."test/?.lua"
cpath = root.."cservice/?.so"

이 설정파일은 실제로 루아코드이다, 보통 key=value 형식으로 값을 설정한다. 스카이넷이 기동할때, 필요한 설정항목을 읽어둔다. 그리고 사용하지 않는 설정항목은 skynet 내부의 env 테이블에 문자열형식으로 저장한다. 이들 설정항목은 skynet.getenv 를 통해 접근할수있다.

필요한 설정항목:

  • thread 는 작업 스레드의 갯수이다. 일반적으로 CPU 코어갯수보다 작아야한다.

  • bootstrap 스카이넷이 기동하는 첫번째 서비스와 서비스에 넘겨질 파라메터이다. 기본값은 snlua bootstrap 이며, bootstrap 은 기동할 lua 서비스이다. 보통 service/bootstrap.lua 스크립트를 말한다

  • cpath 는 c로 쓰여진 서비스모듈의 위치이다, 보통 cservice 폴더 아래의 .so 파일을 가르킨다.만약 시스템의 동적라이브러리가 .so 확장자가 아니라면, 관련된 내용을 변경해야한다. 이 경로는 여러개의항목을 설정할수있으며 ; 로 구분한다

기본 bootstrap 코드내에서는 또한 다음의 설정항목을 사용한다:

  • logger skynet 내부의 skynet_error 이 C API가 입출력할 내용을 어떤 파일에 넣을지 결정한다. 만약 loggernil 로 설정되면, 표준입출력이 된다. 파일이름을 설정하여 특정한 파일내에 기록하도록 설정할수 있다.

  • logservice 의 기본값은 logger 이다. 스스로 제작한 log 서비스를 설정할수있다(예를들어 시간과 다른정보를 포함한 로그). 구현은 service_logger.c 를 참고할 수 있다. 주: 만약 루아로 이 서비스를 작성하고싶으면, 여기에 snlua 를 넣을수 있다, 그리고 logger 에 구체적 lua 서비스 이름을 설정한다. Examples 디렉토리 아래에 config.userlog 를 참고할수있다.

  • logpath 한개경로를 설정한다, 운행시 log 를 열었을때, 이 서비스는 모든 인풋 메시지를 모두 이 디렉토리 아래에 저장한다, 파일이름은 서비스주소이다.

  • standalone 만약 이항목이 설정되면 skynet 이 시작할때 메인 프로세스로 시작한다 (스카이넷은 서로다른 설비들에 네트워크 상의 프로세스들로 이루어질수있다), 이뜻은 이 프로세스가 메인노드임을 의미한다, 메인노드는 제어센터를 기동해야하며, 한개의 포트를 listen 하여 다른 노드들이 접근할수 있도록 해야한다.

  • master 컨트롤센터의 주소와 포트를 설정한다. 만약 standalone 항목이 설정되있다면 이항목은 standalone 과 동일해야한다

  • address skynet 노드의 주소와 포트, 다른노드와 네트워크를 편리하게 이루기 위함. 주: 오직한개의 노드만 있더라도 여전히 컨트롤센터를 시작하는데 주소와 포트를 지정해야한다.

  • harbor 는 1-255 값을 가진다. 스카이넷 네트워크는 최고 255개의 노드를 지원한다 각 노드는 유일한 일련번호를 가져야한다.

  • harbor를 0으로 설정하면, skynet 은 싱글노드 모드로 동작한다. 이경우 master, address, standalone 항목을 설정할 필요가 없다.

  • start bootstrap의 마지막순서에 기동하는 Lua 서비스이며, 당신이 정의한 skynet 노드의 메인 프로그램이다. 기본은 main이며, 이는 main.lua 스크립트를 의미한다. 이 루아서비스의 경로는 luaservice 에 의해 지정된다.

  • enablesssl 기본값은 공백이다. 만약 HTTPS 를 지원하는 TLS 모듈이 필요하다면 true 로 설정한다.

클러스터서비스에 사용되는 설정항목:

  • cluster 는 클러스터 설정파일의 경로를 지정한다.

snlua 는 lua 서비스를 제공하며, 다음의 설정항목들을 참고하여 lua 코드를 로드한다.

  • lualoader Lua 스크립트가 lua service 로딩하는데 사용된다. 보통은 lualib/loader.lua 로 설정된다. 이 스크립트는 서비스의 이름을 파징하고, lua 스크립트를 로딩한다. snlua 는 다음의 설정항목을 로딩하고, 초기화 완료된 LuaVM에 전역변수로 설정한다. 자세한내용은 코드를 체크하자.

  • SERVICE_NAME 첫번째 파라메터이다. 보통 서비스이름이다.
  • LUA_PATH config 파일내의 lua_path
  • LUA_CPATH config 파일내 설정한 lua_cpath항목
  • LUA_PRELOAD config 파일내 설정한 preload항목
  • LUA_SERVICE config 파일중 설정한 luaservice

  • luaservice lua 서비스 코드의 파일 위치 경로. “;” 를 사용하여 여러개 설정 가능, 루아 서비스가 한개의 파일이름이 아니라 디렉토리로 생성된다면, 경로는 package.path 에 추가된다. 예로, lua 서비스륵 작성하고, 이 서비스가 사용하는 라이브러리도 동일한 디렉토리안에 넣고 싶을 때가 있다.
  • lua_path 는 package.path 안에 추가된다. require 명령이 사용하게 된다.
  • lua_cpath 는 package.cpath 에 추가된다. require 명령이 사용하게 된다.
  • preload: package 의 경로 설정후, lua 서비스 코드 로딩전, loader 는 preload 의 스크립트를 실행한다. 기본값은 공백이다.
  • snax snax 프레임워크로 쓰여진 서비스의 검색 경로
  • profile 기본값은 true 이다, 이것은 각서비스가 사용하는 cpu 시간을 계산하는데 사용된다. 그값은 debug 콘솔에서 확인할수있다. 이것은 퍼포먼스에 약간의 영향을 미친다. false 로 설정하여 비활성화할수있다.

그외에, 환경변수로부터 설정값을 넣어줄수있다. 예를들어, thread 항목을 SKYNET_THREAD 환경변수로 셋팅할수있다. 셋팅파일에 다음과 같이 설정한다

thread = $SKYNET_THREAD

이렇게하면 skynet 기동시, SKYNET_THREAD 환경변수가 config 의 $SKYNET_THREAD 를 대체하게된다.

데몬모드

데몬 설정 daemon = “./skynet.pid” 백그라운드로 스카이넷을 시작할수있다. 주의(logger 를 설정해서 로깅을 하자)

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