[번역] nact.io - 2.2 액터 간 통신
이현수 책임
이 포스팅은 nact.io 공식 홈페이지를 번역한 글입니다.
[NEW] 이제 공식 사이트에서도 한글 문서가 제공됩니다. https://nact.io/ko_kr
액터 간 통신
단일 액터 혼자서는 존재 의미가 없습니다. 액터는 협동을 해야합니다. dispatch
함수를 사용해서 액터에서 다른 액터로 메시지를 보낼 수 있습니다.
dispatch
함수의 3번째 인자는 메시지 송신자를 가리킵니다. 이 파라미터가 있음으로 해서 액터의 메시지 핸들러 함수를 작성할 때, 받은 메시지에 대해 응답을 보낼 액터를 명시적으로 지정할 필요가 없습니다. 대신 ctx.sender
를 통해서 송신자 액터를 참조할 수 있습니다.
아래 예제에서, ping
, pong
두 액터가 각각 ‘ping’, ‘pong’ 메시지를 보내며 핑퐁게임을 하고 있습니다. 게임을 시작하기 위해 pong
액터가 ping
액터에게 메시지를 보내고, ping
액터는 ctx.sender
로 pong
액터를 참조해서 역시 pong
액터에게 응답 메시지를 보냅니다.
const delay = (time) => new Promise((res) => setTimeout(res, time))
const ping = spawnStateless(system, async (msg, ctx) => {
console.log(msg)
// ping: Pong is a little slow. So I'm giving myself a little handicap :P
await delay(500)
dispatch(ctx.sender, ctx.name, ctx.self)
}, 'ping')
const pong = spawnStateless(system, (msg, ctx) => {
console.log(msg)
dispatch(ctx.sender, ctx.name, ctx.self)
}, 'pong')
dispatch(ping, 'begin', pong)
콘솔에는 다음과 같이 출력됩니다.
begin
ping
pong
ping
pong
ping
...