2013. 11. 19. 11:36

개발 준비가 완료된 후 

ASP.NET 샘플 사이트를 따라서 샘플을 만들어 보았다.

그 결과 아주 간단하게 챗팅방이 완성되었다.



오페라의 문제인지 확실치는 않지만 이녀석은 메시지를 정상적으로 수신하지 못하는 경우도 있고.. 

메시지 수신도 다른 브라우저에 비하여 늦었다.(버전이 오래된건가 아니면 Polling 방식으로 데이터를 가져오다 먹어버린건지...)


TestSignalR.zip



node.js 에서 web socket 방식의 웹채팅을 본 이후에 웹에서도 간단히 채팅프로그램을 구현하겠구나 생각했는데.. 

MS 진영에서도 이렇게 쉽게 구현할 수 있는 방법을 제공한 다는 것에 호기심을 느끼고 한번 따라 만들어 보았다.

Posted by CoolDragon
2013. 11. 18. 18:00

웹소켓으로 실시간 처리를 할 수 있는 MS쪽 기술이라 하여 샘플을 실행해 보려 하였으나 

실패를 거듭하여 다른이들도 저와같은 동일한 고충을 겪을 사람들이 혹시나 있을까 싶어 정리를 해본다.


우선 VS2012를 가지고 있으면 매우 좋겠지만, 본인은 툴을 보유하고 있지 않은 관계로 VS2010으로 해보기로 결정하였다.

VS2010 환경에서 실행하려면 우선 SP1 를 설치해야 한다.


그 이후 패키지 관리자 콘솔에서 SignalR을 설치하려고 하니.. 잘 설치가 안된다..

그래서 이곳 저곳 헤맸더니 누군가가 답변을 실시간으로 주시더라는.. ㅋㅋ


[첫번째 주요링크]

http://www.asp.net/signalr/overview/signalr-20/getting-started-with-signalr-20/supported-platforms

[두번째 주요링크]

http://www.asp.net/signalr/overview/signalr-1x


SignalR버전에 따라서 사용가능한 환경이 정해져있나보다..

VS2010 버전에서는 Framework 4.5도 사용할 수도 없고 해서 아래와 같이 버전을 명시해서 다운로드 받아줘야 하나보다.

[.NET Framework 4.0 기반]

install-package Microsoft.AspNet.SignalR -Version 1.1.3


[.NET Framework 4.5 기반]

install-package Microsoft.AspNet.SignalR


이렇게하면 SignalR이 설치가 되어 기본적으로 개발을 진행할 수 있는 준비가 되었다고 할 수 있다.

Posted by CoolDragon
2013. 11. 1. 14:43
    public static class Base64String
    {
        public static string Base64Encode(this string src, System.Text.Encoding enc)
        {
            byte[] arr = enc.GetBytes(src);
            return Convert.ToBase64String(arr);
        }

        public static string Base64Decode(this string src, System.Text.Encoding enc)
        {
            byte[] arr = Convert.FromBase64String(src);
            return enc.GetString(arr);
        }
    }
Posted by CoolDragon
2013. 10. 31. 16:42

모듈 설치

npm install redis


소스

var _redis = require("redis");


var redis = _redis.createClient(포트, 아이피);


redis.get('키', function(error, result) {

    if (error) console.log('Error: '+ error);

    else console.log('Name: ' + result);

});


redis.set('키', Date(), function(error, result) {

    if (error) console.log('Error: ' + error);

    else console.log('Saved');

});


참조


Posted by CoolDragon
2013. 10. 31. 16:40

모듈 설치

npm install mysql


소스

var mysql = require("mysql");

var mysqlConfig = {

    host : "아이피",

    port : "포트",

    user : "로그인ID",

    password : "비밀번호",

    database : "데이터베이스명"

}


var conn = mysql.createConnection(mysqlConfig);


conn.query("CALL 프로시저명(?, ?);", [인자1, 인자2], function(err, rows) {

    if (err) {

        console.log("MySQL Query Execution Failed....");

        console.log(err);

    }

    for (var i = 0; i < rows[0].length; i++) {

        console.log(rows[0][i]);

    }

    conn.destroy();

});


---------------------------------------------------------------------------------------------------------------

// OUTPUT 인자 가져오기

conn.query("CALL 프로시저명(?, ?, @id);", [인자1, 인자2], function(err, rows) {

    if (err) {

        console.log("MySQL Query Execution Failed....");

        console.log(err);

    } else {

        conn.query("SELECT @id;", function(err, rows, field) {

            console.log('id is ' + rows[0]['@id']);

            conn.destroy();

        });

    }

});


Posted by CoolDragon
2013. 10. 21. 13:24

> node -v

> node --version


> npm --version


Posted by CoolDragon
2013. 10. 2. 17:39

1. redis 모듈 설치

npm install redis

2. 소스코드
var _redis = require("redis");
var config = require("./config/config.json");

var redis = _redis.createClient(사용Port, 사용IP);

redis.get('foo', function(error, result) {
    if (error) console.log('Error: '+ error);
    else console.log('Name: ' + result);
});

redis.set('foo', Date(), function(error, result) {
    if (error) console.log('Error: ' + error);
    else console.log('Saved');
});


Posted by CoolDragon
2013. 10. 2. 17:25

[param.js]

var env = process.argv[2] || 'dev';


console.log(env); // 파라메터 사용

console.log(process.env.NODE_ENV); // 환경변수


1. windows는 환경변수를 사용하려면 아래와 같이 미리 값을 설정해서 넘겨야 한다.

2. 환경 변수 사용 설정


Posted by CoolDragon
2013. 9. 10. 09:15
1. class object
    [Serializable, XmlRoot("Field")]
    public class Field
    {
        [XmlAttribute("nm")]
        public string Name { get; set; }

        [XmlText]
        public string Text { get; set; }
    } 
2. serialize
XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
ns.Add("", "");
StringBuilder sb = new StringBuilder();
using (XmlWriter writer = XmlWriter.Create(sb, new XmlWriterSettings() { OmitXmlDeclaration = true }))
{
    new XmlSerializer(typeof(Field)).Serialize(writer, type, ns);
}
string xmlString = sb.ToString();
3. deserialize
XmlReader reader = XmlTextReader.Create(new StringReader(xmlString));
XmlSerializer xmlSerializer = new XmlSerializer(typeof(Field));
var result = (Field)xmlSerializer.Deserialize(reader);
reader.Close();


4. Sample

public static XDocument Serialize<T>(this T source)

{

var ser = new XmlSerializer(source.GetType());

var sb = new StringBuilder();

using (var writer = new StringWriter(sb))

{

ser.Serialize(writer, source);

}

return XDocument.Parse(sb.ToString());

}


      public static T Deserialize<T>(this XDocument xmlDocument)

      {

          var xmlSerializer = new XmlSerializer(typeof(T));

          using (var reader = xmlDocument.CreateReader())

              return (T)xmlSerializer.Deserialize(reader);

      }


        



Posted by CoolDragon
2013. 8. 13. 15:41
var express = require('express'),
    app     = express(),
    port    = 8080;

app.configure(function(){
	app.use(express.bodyParser());
});

app.post('/', function(req, res){
	console.log(req.body.);
	res.send({ status: 'SUCCESS' });
})

app.listen(port);


위와 같은 코드로 샘플을 만들고 json을 post data로 넘겨 

서버에서 log로 찍어보려 했지만 아래와 같이 undefined로 나타나더라.. 아니 왜?



한참 삽질하면서 검색하던 중에  content-type이라는 녀석이 눈에 들어온다.. 

그렇다 node.js 의 json data를 서버에 요청할 경우 header에 Content-Type: application/json 을 담아 요청을 했어야 했다.



별것 아닌것 같지만.. 괜한 시간 뺏길 수가 있다.

Posted by CoolDragon