MongoDB_id 값은(데이터를 넣을 때 MongoDB가 넣어주는 값의 상위 문자는 만들어질 때의 unixtime16진수 표현이다.

그래서 _id 값의 상위 문자를 추출해서 datetime으로 변환하면 시간을 알 수 있다.

 

string mongo_id = "57b3ce6269d7d0098ef3b603";

 

string hexString = mongo_id.Substring(0, 8);

int num = Int32.Parse(hexString, System.Globalization.NumberStyles.HexNumber);

 

Console.WriteLine(num);

Console.WriteLine(DateTimeOffset.FromUnixTimeSeconds(num).ToLocalTime());




저작자 표시
신고
by 흥배 2016.11.30 08:00

IOCP에 관한 자료는 네이버를 검색해도 꽤 많이 나온다(IOCP가 최신 기술은 아니니...)

그런데 대부분 IOCP를 사용한 예제는 쉽게 찾기 힘들다.

그래서 설명을 보고 실제 구현을 해볼 때 좀 망막할 수 있다.


IOCP를 처음 구현해보는데 시작이 잘 안되는 경우 아래의 프로젝트를 기반으로 해보기 추천한다.

이것은 넥스트에서 게임서버 수업 때 사용한 자료이다.


fixme_degiyamIOCP

https://github.com/jacking75/fixme_degiyamIOCP


'온라인 서버 제작자 모임'에 degiyam 이라는 닉네임의 개발자분이 오래 전에 공개한 것이다.

컨텐츠 구현 부분이 거의 없고, 클라이언트도 간단하게 있어서 분석하고 테스트 하기 좋다.

또 윈도우 서비스 모드와 콘솔 모드를 동시에 지원하는 프로그램 개발할 때 참고하기도 좋다.


fixme_MyFirstGameServer

https://github.com/jacking75/fixme_MyFirstGameServer


본인이 오래 전에 첫 서버 프로그래머로 처음으로 만든 온라인 게임 서버 이다.

처음 개발한 것이라서 지금 보면 문제점이 많다.

실제 게임 컨텐츠가 구현되어 있고, 코드가 C 언어스러워서 위의 프로젝트 보다 분석하기 쉽지 않을 것이다.



온라인 상으로 질문에 대한 답변을 하기에는 내 시간이 너무 소요 될 것 같아서 받지 않는다. 

꼭 물어보고 싶다면 판교 테크노밸리까지 오기 바란다^^;;;



저작자 표시
신고
by 흥배 2016.11.28 08:00

한국 온라인 게임 개발에서 PC에서 모바일로 넘어가면서 온라인 게임 서버 개발에 큰 변화가 있었다.

 

모바일 시대 이전에는 ‘Windows OS + MS SQL Server + IOCP(비동기 네트워크) + C++’ 조합이 거의 표준 기술이었다

그러나 지금은 비실시간 통신을 아직은 많이 사용하고, C++ 이외의 다른 언어를 사용하는 등 다양성이 크게 생겼다.

 

그리고 모바일 게임 개발 특성 상 개발 기간이 최대한 빨라야 좋고, PC에 비해 네트워크 환경이 좋지 않아서 이전에 비해 상용 네트워크 엔진을 구매해서 서버를 개발하는 경우가 꽤 늘었다.

 

상용 네트워크 엔진은 일단 유료이기도 해서 처음 구매한다면 꽤 고민이 될 것이다.

나는 아직 상용 네트워크 엔진을 사용한 적이 없지만 내가 만약 구매한다면 나는 기술 지원 이 가장 잘 되는 것을 사고 싶다.

 


완벽이라는 것은 있을 수 없고, 혹은 엔진에는 문제가 없지만 사용자의 실수로 잘 못 사용할 수도 있다. 

이 때 엔진 판매사에 문의를 하면 빠른 피드백으로 문제를 해결해줘야 안정적으로 게임 개발과 게임 서비스를 할 수 있다.

 

내가 구매한 엔진이 다른 프로젝트에서는 문제 없이 잘 사용되었지만 하필 재수 없게 내가 사용할 때 버그가 나온 경우 엔진 개발사가 빨리 이것을 고쳐주지 않는다면 개발이 정체되고 앞으로 또 이런 문제가 발생했을 때를 생각하면 무척 불안해질 것이다.

 

네트워크 엔진을 사기 전 가능하면 엔진 개발사가 어느 정도의 기술 지원을 할 수 있는지 꼭 확인 하는 것이 좋다

엄청나게 성능이 좋고, 가격이 아주 싸더라도 기술 지원을 제대로 받을 수 없는 회사라면 자체 개발해서 사용하는 것 보다 더 많은 위험도를 감수해야 하고 많은 시간을 소비할 수 있다.

(특히 네트워크 엔진의 경우 소스 코드도 대부분 주지 않으므로 고치려고 해도 고칠 수도 없다)

저작자 표시
신고
by 흥배 2016.11.25 08:00

Microsoft Connect(); // 2016  행사에서 발표된 것이다.


성능 평가를 보면 성능 부분에서는 문제가 없다고 봐도 될 것 같다.

ASP.NET Core는 지금도 계속 성능 향상 부분에 작업을 하고 있어서 앞으로도 더 기대가 된다.



출처: https://connectevent.microsoft.com/


저작자 표시
신고
by 흥배 2016.11.23 08:00

'온라인 서버 제작자 모임'(주로 온라인 게임 서버 개발자가 많습니다)에서 오래만에 세미나를 합니다.


온라인 서버 제작자 모임 회원이 아니라도 참석할 수 있으니 관심 있는 분들은 신청해 주세요^^


신청은 아래의 링크를 통해서 하면 됩니다.

http://onoffmix.com/event/83434



1. 최흥배: Pokemon Go의 Server에 사용된 기술(외부자료를 통해 알아보는)


2. 이지현: 게임 개발에서 눈여겨 볼 AWS 서비스들


3. 초보대왕: ‘Windows와 리눅스 (네트워크 프로그래밍)호환 이야기 10탄’

저작자 표시
신고
by 흥배 2016.11.21 08:00

아래 코드를 linqpad로 실행하면

void Main()

{

           Test t = new Test();

    var y = t.aaa();

   

           System.Console.WriteLine(y);

}

 

class Test {

    public int aaa() {

        int x = 1;

 

        try {

            return (x += 1);

        } catch (Exception e) {

 

        } finally {

            x += 3;

        }

        return x;

    }

 }

 

출력은 2가 된다.

 

위 코드의 출처는 http://www.pixelstech.net/article/1474892842-try-%7B-return-%7D-finally-%7B%7D 이다

언어는 java를 대상으로 했지만 c#도 비슷한 것 같다.

 


출력이 2가 나오는 이유는 (java의 경우) 다음과 같다JVM 문서를 보면


만약 try 절에서 return을 실행할 경우 컴파일 된 코드는 다음과 같은 처리를 한다.

- 로컬 변수에 반환 값을(만일 존재하는 경우)을 저장한다.

- finally절 코드까지 jsr를 실행한다.

- finally절의 return에서 로컬 변수에 저장된 값을 반환한다.

 

return ++x가 실행되면 JVM++x의 값을 임시 변수에 저장하고, finally 블록을 계속 실행한다. finally가 실행된 뒤 임시 변수에 저장되어 있는 값을 메서드의 호출자에게 돌려준다.

 

저작자 표시
신고
by 흥배 2016.11.18 08:00

드디어(?) mac용으로 비주얼스튜디오가 나온다.

https://msdn.microsoft.com/magazine/mt790182

 

정식 발표는 connect(); 2016(https://connectevent.microsoft.com/) 이라는 행사에서 발표된다고 한다.

 

기본 베이스는 windows Visual Studio가 아닌 Xamarin Studio를 바탕으로 했다고 한다.

 

현재 프로그래밍 언어는 C#, F#을 지원한다고 한다. 정식 발표 때 C++도 지원될지는 아직은 모르겠다(만약 정식에는 나오지 않더라도 멀지 않은 기간에 업데이트로 지원할 것 같다).

 

Xamarin을 사용할 있으므로 iOS, Android, macOS 대응 앱을 개발할 수 있으면 .NET Core를 사용하는 서버 앱도 개발할 수 있다.

 

 

그리고 참고로 Visual Studio 차기 버전은 Visual Studio 2017로 결정 되었다고 한다 내년 초에 나올 예정인 것 같다.

저작자 표시
신고
by 흥배 2016.11.15 08:00

RDBMS의 SP처럼 MongoDB에는 Java Script로 저장 함수를 만들어서 사용 할 수 있다.

각 데이터베이스의 Function에 만들고, eval() 함수로 호출해서 사용한다.


db.system.js.save(

                   { _id: "echoFunction",

                     value : function(x) { return x; }

                   }

                 )


db.eval( "echoFunction( 'test' )" )



- 2.4 버전까지는 성능 상의 문제로 추천하지 않는다.

http://docs.mongodb.org/manual/tutorial/store-javascript-function-on-server/

http://stackoverflow.com/questions/15660161/why-is-it-not-recommended-to-use-server-side-stored-functions-in-mongodb


- 이유는 eval를 사용하면 자바스크립트 코드로 동작하고, 이 SP가 호출 후 끝날 때까지 lock이 걸려서 다른 작업을 할 수 없게 된다.

- 지금은 비추하는 기능이지만 근래 MongoDB의 자바스크립트 라이브러리가 V8 엔진으로 바뀌어서 장래에는 쓸만하지 않을까 예상한다.

- 게임 서비스 도중에는 사용하기 부담스럽겠지만 서비스 이외에 관리 측면에서는 자주 사용하는 기능을 Function으로 만들어 놓고 사용하면 편리 할 것 같다.

- 당연하지만 SP에서 컬렉션 조작도 할 수 있다.


db.eval( function(name, incAmount) {

    var doc = db.myCollection.findOne( { name : name } );

    doc = doc || { name : name , num : 0 , total : 0 , avg : 0 };


    doc.num++;


    doc.total += incAmount;


    doc.avg = doc.total / doc.num;


    db.myCollection.save( doc );


    return doc;

 },


 "eliot", 5 );





Mongo Shell 에서 사용하기


같은 database에 있는 function을 호출 할 수 있다.



MongoDB의 쿼리 명령어도 사용 할 수 있다.





저작자 표시
신고
by 흥배 2016.11.14 08:00

linux에 redis 설치 

http://cs-arthur.tistory.com/113

http://misoin.tistory.com/1

http://blog.outsider.ne.kr/763


Windows용 Redis를 닷넷에서 사용

http://www.codeproject.com/Articles/636730/Distributed-caching-using-Redis-server-with-Net-Cs



Redis 연구 노트

http://kerocat.tistory.com/1


Commands - key편

http://blog.saltfactory.net/66


콘솔 명령어 정리

http://blog.naver.com/forioso/10173379225


Redis v2.2.12 맛보기

http://www.slideshare.net/knight1128/redis-8896084

저작자 표시
신고
by 흥배 2016.11.11 08:00

좀 오래된 기사인데 며칠 전에 알게 되었다.

(MS SQL Server는 2008까지만 사용해봤고, 요즘 게임 업계 분위기가 2012는 라이센스 비용 등의 문제로 사용하지 않는 추세라서..)


MS SQL Server2012까지만 SQL ServerOLE DB 드라이버를 제공한다고 한다.

https://blogs.msdn.microsoft.com/sqlnativeclient/2011/08/29/microsoft-is-aligning-with-odbc-for-native-relational-data-access/

 

OLE DB 자체가 사라진 것은 아니고 이 기술을 만든 MS가 자신들의 DB 서버에서는 2012 버전까지만(최신은 2016) OLE DB로 접속할 수 있다고 한다.


MySQL 등에서는 아직 지원하지 않는다는 이야기를 들어본 적은 없지만 아마 장래에는 지원하지 않을 것 같다.

 

장래에도 DB 코드가 문제 없이 돌아가기를 바란다면 OLE DB는 사용하지 않는 것이 좋을 것 같다.

저작자 표시
신고
by 흥배 2016.11.09 08:00
| 1 2 |