Skip to content
This repository
Fetching contributors…

Cannot retrieve contributors at this time

file 106 lines (75 sloc) 4.685 kb

RPC 서버사이드 웹소켓 Responder

RPC Responder는 당신이 브라우저의 웹소켓을 통해 서버의 함수들의 호출을 한 경우에 response를 반환 합니다.

RPC Responder는 Request Middleware와 함께 할때 강력합니다.

브라우저에서 원격 프로시져 콜을 할수 있는 ss.rpc() 함수를 사용하세요.

우리가 온라인 스토어의 최근의 제품들의 배열을 반환 하고 싶다고 합니다.

브라우저에서 다음 명령을 호출 하도록 합시다.

ss.rpc('products.latest', function(result){ console.log('The latest products are:', result); })

이 명령은 웹소켓을 통해 전송되고 직접적으로 RPC Responder에게 전달 될 것입니다만, 서버의 어떤 함수가 호출됬는지 어떻게 알 수 있을까요?

RPC Responder는 server/rpc아래 모든 명령들을 API 트리로 로드 합니다.

그래서 그명령어는 /server/rpc/products.js.파일에서 'products' 안에 'latest'와 일치 되는 'products.latest'를 호출 할 것 입니다.

products.js 파일은 적당한 action들을 포함해야 합니다:

// server/rpc/products.js
exports.actions = function(req, res, ss){

  return {

    latest: function(){
      res(['iPhone 4S', 'Dell LCD TV', 'HP Printer']);
    }

  }
}

매개변수 전달

RPC Responder 는 무제한의 인자를 지관적으로 얻거나 전달 할 수 있습니다.

서버측 코드에 또 다른 액션을 작성해 봅시다:

// server/rpc/products.js
exports.actions = function(req, res, ss){

  return {

    topSelling: function(startDate, endDate, productType){
      // 연산후 배열을 클라이언트에 리턴
      res(['iPad', 'iPhone', ...], 'Scooby Doo');
    },

    latest: function(){
      res(['iPhone', 'Dell LCD TV', 'HP Printer']);
    }

  }
}

이것을 브라우저에서 호출합니다:

// client/code/main/products.js
var productType = 'electronics';
ss.rpc('products.topSelling', '2012-01-01', '2012-01-31', productType, function(products, bestSalesperson) {
  console.log('가장 많이 팔린 ' + productType + ':', products);
  console.log('최고의 세일즈맨:', bestSalesperson);
})

당신이 원하는 만큼 많은 인자를 전달 할 수 있습니다. - 단 서버로부터 응답을 기대한다면 마지막 인자는 항상 콜백(함수)라는 것을기억하세요.

그것은 내부에서 어떻게 동작하는 것일까요?

RPC Responder는 JSON을 이용하여 쌍방향으로 메세지들을 직렬화 합니다.

그래서 실제로 보내는 내용은 이런식의 문자열입니다:

{id: 1, m: 'method.to.call', p: [param1, param2, ...]}
Something went wrong with that request. Please try again.