공통조건

  1. IIS/PHP/WAS같은 서비스 종속이 있는것은 제외

  2. OS 종속있는 서비스도 제외

  3. StandAlone으로 작동이 가능해야함

  4. WebSocket연동이 수월해야함

  5. 실제 프로젝트에 사용해본것

PlayFrameWork

  • 주언어:Java/Scala
  • Link : https://www.playframework.com/
  • Wesocket:Atmosphere
  • MVC : 포함됨
  • 사용한 사례:상용 게임 로비 API 서비스에서 이것을 이용하여 개발함 PokerGame

Rotes정의 방법

GET     /rest/GameInfo GameInfo()

심플한 Get Method 코드 샘플

def GameInfo = Action {
    Ok( Json.toJson( "할롱") )
  }

서비스 실행코드: play run “9000”


Microsoft.Owin.Hosting

주언어:C# , Open소스이지만, Micorosoft의 네임스페이스에 포함된것으로 보아 IIS와는 별개로 MS에서 밀어주는듯

Link : http://owin.org/

Wesocket:WesocketSharp,SuperWebSocket및 다수 선택가능,다수 선택이란 의미는 아직 .net진영에 socket.io처럼 대표적인 소켓모듈이 없다는 의미

MVC : 선택가능하지만, 사용못해봄

사용한 사례: 체스고및 채팅봇 미니 웹게임 등에서 사용함


Rotes정의 방법

Get["/GameInfo/{tid}", runAsync: true] = async (_, token) => .......

심플한 Get Method 코드 샘플

public async Task<Response> GameInfo(int tourId){...}

서비스 실행코드

var host = new NancyHost(new Uri("http://localhost:9000");  //Host 여러가지 선택가능
host.start()


Node.js

주언어:Javascript

Link : https://nodejs.org/ko/

Wesocket:Socket.io

MVC : Express, View엔진을 선택할수 있음

사용한 사례 : 롤전적조회등 간단한 개인 웹 프로젝트

Rotes정의 방법

app.use('/', routes);


심플한 Get Method 코드 샘플

router.get('/GameInfo', function(req, res, next) {
  res.send('respond with a resource');
});

서비스 실행코드

server.listen(80, function () {
        console.log('Example app listening on port 80!');
});


정리

Node.js의 심플한 웹서버에 심플하게 사용할수 있는 웹소켓모듈이 먼저 인기를 끈탓인지?

MS 진영과 Java진영에도 각각 영향을 받아 WebSocket을 쉽게 적용할수 있는 독립형 StandAlone형 웹서비스 개발지원을 하는듯 보이며

플래폼 태생 이전에, 패턴 설계를 누가 했으며 이름이 어떻게 되는지는 모르겠지만

서비스시작,라우터정의,서비스코드 정의방법 으로 연결되는 코드 형태가, 언어가 다르지만 3가지 플래폼 모두 유사하다.

즉 한가지만 잘 사용하면, 나머지도 쉽게 사용할수 있게되는듯, 또한 어느 한녀석을 선택했는데 부족한 부분이 있다면

Webservice는 JVM에서 구동하고 코어 모듈을 C#으로 한다던지(JnBridge) , Node.js 에서 코어 모듈은 C#로 한다던

지 (Edge.js 맘에 드는 웹서비스를 고르고, 익숙한 언어로 코어로직을 짜는 플랜도 가능하다.

웹서비스와 별개로 두번째 고려사항은, 개발 확장성으로인해 Pub/Sub System 이 얼마나 매끄럽게 사용할수 있는지 여부

Redis를 사용하면 가장 무난하지만…

Akka의 ActorSystem(java/c#은컨버팅버젼) EventBus

사용도 고려할만 하다. (Actor패턴이 광범위하게 적용이 되었지만, 가장 잘 정리가 된 녀석인듯)

만약 Node.js에서 Java진영에서 만든 Akka개념을 사용하려면

Node.js → Edge.js → Akka.net 이런 변태적인 조합도 사용가능

Node.js → Edge.js → JnBridge → Java 이것은 극악 모도한 조합

Actor모델이 Akka에만 있는것은 아니니….. Node.js → Actor.js(존재하는지모르지만 어쨋건 이상적인건 한가지 개발플래폼만 사용하는것)

WebSocket모듈의 설계

이것은 , .net socket을 사용하면서 pub/sub 시스템을 akka의 컨셉을 가져와 구현해본 내용

akka.net에서는 subChannel이 지원되지 않아, 약간 손을 보았지만, 대부분의 pub/sub 시스템에서 지원하는 부분

actorsock.jpg


사용예

//사용자를 만든다. -사용자 접속시
TopicEventBus.CreateActor("sangman");
TopicEventBus.CreateActor("rapael");
TopicEventBus.CreateActor("pierre");
 
//뉴스 메시지를 만든다.
MsgEnvelope msg1 = new MsgEnvelope("News", "all", "Hello");
MsgEnvelope msg2 = new MsgEnvelope("News", "all", "Hola");
MsgEnvelope msg3 = new MsgEnvelope("News", "all", "안녕하세요");
 
//각각의 사용자는 보고싶은 언어로 뉴스섹션을 선택한다. 추가 구독도 가능하다.
TopicEventBus.Subscribe("sangman", "News", "스포츠", "kr");
TopicEventBus.Subscribe("rapael", "News", "스포츠", "es");
TopicEventBus.Subscribe("pierre", "News", "스포츠", "fr");
 
//서버에 의해 Push 메시지가 발생한다.
TopicEventBus.Publish(msg1, "스포츠", "en");
TopicEventBus.Publish(msg2, "스포츠", "es");
TopicEventBus.Publish(msg3, "스포츠", "kr");
 
 
//각각의 사용자에게 , 언어에 맞는 뉴스가 전달되며, 아마 대부분의
//실시간 통신에서 유용한 방법이 됨... WebSocket혹은 Push서버와 연동하면 유용함