관리 메뉴

HAMA 블로그

Vert.x 를 이용한 실시간 웹 어플리케이션 (3) 본문

Vert.x

Vert.x 를 이용한 실시간 웹 어플리케이션 (3)

[하마] 이승현 (wowlsh93@gmail.com) 2015. 5. 22. 15:36

순서 

1. Vert.x  설치 및 Hello world !! 

2. 간단히  Vert.x  다루어보기 

3..Vert.x 와 MongoDB 연결 

4. 실시간 통신

5. 모듈개발 

6. 배포 


먼저 MongoDB  를 설치해봅시다. (윈도우에) 

1. https://www.mongodb.org/downloads  요기서 MSI 파일 다운로드후 설치  (더블클릭후 ㄱㄱ 씽) 

2. 아무데나 폴더하나 만듭니다. ( 예:  D:\mongodb\DATA)

3. mongod --dbpath d:\mongodb\DATA   치면 DB 가 실행됩니다. 

4. mongo 치면 가지고 놀수있게 됩니다.  (mongod 는 실행파일 / mongo 는 클라이언트) 



1.  app.js 를 다음과 같이 바꾸어봅니다.

var container = require("vertx/container");

container.deployModule("io.vertx~mod-web-server~2.0.0-final", {

  port: 8080,

  host: "localhost",

  bridge: true,

  inbound_permitted: [

    { address: 'mindMaps.list' },

    { address: 'mindMaps.save' },

    { address: 'mindMaps.delete' }

  ]

});

container.deployModule("io.vertx~mod-mongo-persistor~2.0.0-final", {   // mongo 모듈이 추가되었네요 !

  address: "mindMaps.persistor",    // 모듈을 위한 이벤트 버스 주소 

  db_name: "mind_maps"              //  이 퍼시스터가 사용할 데이타베이스 이름 

});


container.deployVerticle('mindmaps.js');



2. mindmaps.js 를 다음과 같이 실제 db 연결로 바꾸어줍니다. (이전에는 메모리상의 객체를 사용했지요) 

var eventBus = require('vertx/event_bus');

var console  = require('vertx/console');


function sendPersistorEvent(command, callback) {

  eventBus.send('mindMaps.persistor', command, function(reply) {  // mongo 퍼시스터에 명령을 보내고 

    if (reply.status === "ok") {                                                  // 응답을 받은후에 핸들러 호출 

      callback(reply);

    } else {

      console.log(reply.message);

    }

  });

};


eventBus.registerHandler('mindMaps.list', function(args, responder) {

  sendPersistorEvent(

    {action: "find", collection: "mindMaps", matcher: {}},    // mindMaps 에서 모든것을 가져와서 응답~

    function(reply) {

      responder({mindMaps: reply.results}); 

    }

  );

});


eventBus.registerHandler('mindMaps.find', function(args, responder) {

  sendPersistorEvent(

    {action: "findone", collection: "mindMaps", matcher: {_id: args._id}}, //  id 에 대당하는것을 리턴~

    function(reply) {

      responder({mindMap: reply.result}); 

    }

  );  

});


eventBus.registerHandler('mindMaps.save', function(mindMap, responder) {

  sendPersistorEvent(

    {action: "save", collection: "mindMaps", document: mindMap}, //  새 mindMap 을 저장 

    function(reply) {

      mindMap._id = reply._id;

      responder(mindMap);

    }

  );

});


eventBus.registerHandler('mindMaps.delete', function(args, responder) {

  sendPersistorEvent(

    {action: "delete", collection: "mindMaps", matcher: {_id: args.id}},//  id 를 가진 mindMap 객체 삭제    function(reply) {

      responder({});

    }

  );

});



Comments