[Ajax] Ajax Push / Commet 에 대한 쉬운설명

그 뻔한 polling 을 쓴다면 굳이 comet 이라는 패러다임이 등장하지도 않았겠죠..
작년에 제가 comet에 관해 좀 공부를 했었는데 기억을 되살려서 얘기좀 해볼까합니다..

comet은 event-driven 방식입니다.. 이게 뭔소린가하면..
최초에 클라이언트는 서버에 request 를 합니다. 하지만 서버는 절대 바로 response 하지 않습니다.
" 서버에서 이벤트가 발생했을때" response 를 합니다.. 즉 클라이언트(브라우져)는 마냥 응답을 계속 기다리고 있다가 특정 시점(서버에서 이벤트가 발생한시점)에 실제로 "HTTP  1.1 200 OK ......header....data"  같은 응답을 받게되는 것이죠.
클라이언트는 서버로부터 응답을 받은 즉시 또 request를 날립니다. 서버에서의 이벤트 발생을 지속적으로 listening 하기 위해서죠. 간략하게 설명하자면 이렇습니다..

1. 최초에 클라이언트는 서버에 요청을 날린다.
2. 서버는 바로 응답하지않고 서버에서 이벤트가 발생했을때 응답을 한다.
3. 응답받은 클라이언트는 또 request를 날린다.
4. 서버는 바로 응답하지않고 서버에서 이벤트가 발생했을때 응답을 한다.

바로 이 과정들이 계속 반복되는것입니다.
멋지지 않나요? 전 첨에 이걸 보고 정말 감탄을 했습니다.. polling 방식보다 훨씬 효율적인 방법인거죠...
예를 좀 들어볼께요.

주식의 가격을 알려주는 서버가 있다고 가정해보죠. 클라이언트는(브라우져) A 라는 종목의 현재가가 바뀔때마다 HTML 페이지를 갱신해 줘야합니다. 그런데 다들 아시겠지만, 주식에서 현재가 라는것이 주기적으로 변하는게 아니죠.
1시간동안 가격이 똑같을 수도있고 1분만에 가격이 상승할수도, 하락할수도 있는것입니다.
그런데 이경우에 polling 을 사용하게되면 특정 틱 (예를들어 3초) 마다 서버와 request - response 를 해야하기때문에
서버에 걸리는 부하가 무지 크겠죠.. 게다가 클라이언트가 여러명이라면 서버는 그야말로 죽어나겠죠....
이렇게 갱신 주기를 알 수 없는 값을 원할때 event-driven 방식의 comet server가 필요한것입니다..
이 경우에서는 "현재가가 변하는 시점" 에서만 서버가 response 를 하겠죠. 클라이언트는 응답을 받은 그 시점에 HTML 페이지를 갱신하게되는것입니다.
즉 "실제 데이타가 변경되었을때만 갱신" 이라는. 어찌보면 http 에서는 꿈만 같았던 패러다임이 구현되는 것이지요.

이러한 event-driven 방식을 구현한 서버들을 Comet-Server 라고 합니다.  j2ee 진영에 구현한 서버가 몇개 있더군요. 실제로 제가 웹채팅 어플리케이션 만들때 사용하기도 했습니다.
글이 무지 길어졌군요. comet에 대해 할 얘기가 더있긴하지만. 이거보다 더 길어지면 아무도 안읽을것같아 이만 씁니다..

출처 : http://boast.tistory.com/133



요약하자면,

1.     전체적인 개념은 Server 측에서 client쪽으로 push 하는 것,

2.     그러나 기술 내용은 HTTP request response 방식을 응용,

3.     Client에서 server측으로 해당 서비스에 대해 request 전달 후 Event driven 방식에 의거 response 올 때까지 multi job 수행.

4.     server에서는 client로부터 request 받은 후, 대기하고 필요시 response 전달.

5.     response받은 즉시, request 요청.

'기술참고자료 > Javascript' 카테고리의 다른 글

[Ajax] Ajax와 Reverse Ajax  (0) 2011.05.06

[Android] 키보드 자동숨기기 및 키보드 위에 버튼 올리기

안드로이드 작업을 하다보면, <EditText>가 자동으로 포커싱되면서 액티비티를 열자마자 키보드가 짜잔~ 하면서 출력되는 경우가 종종 있다. 이러한 것을 방지하여, 키보드를 자동숨김 설정하고 싶을때.
그 리고 키보드 때문에 [확인]버튼이 가려져 안 보이는 경우, 뒤로가기 버튼을 누른뒤 다시 [확인]버튼을 눌러야 하는 경우도 생긴다. 이러한 것들에 대한 설정을 매니페스트의 [application]탭의 아래 [Window soft input mode]항목을 선택해 설정해준다.

005

위 항목에서 [select]버튼을 누르면 조그만 팝업이 하나 출력되며, 위 팝업에서


004

[stateHidden]항목이 바로 키보드를 자동출력을 막아주는 것이고, [adjustPan] 항목이 키보드 출력시 액티비티내의 각 UI항목들이 키보드 위로 올라타는것을 설정해준다.  

[Android] 이미지 관련 메모

간혹 이미지 데이터를 바이트배열로 받아오는경우, 아래와 같이 비트맵이미지로 변환시킨 뒤
이미지뷰에 출력하면 된다. 리사이징이 필요한 경우엔 createScaledBitmap() 메서드로 리사이징 해준다.


//BitmapFactory클래스를 이용하여 바이트배열을 비트맵으로 변환
Bitmap profileBitmap =
           BitmapFactory.decodeByteArray(detailArrayRawData, 0, detailArrayRawData.length) ;


//리사이징 시킨 비트맵을 이미지뷰에 출력
this.summonMainImageView.setImageBitmap(
           Bitmap.createScaledBitmap(profileBitmap, 82, 74, true));

[Android] 우분투에 안드로이드 프레임워크 로딩 - 에러발생시 해결방법

우분투 리눅스에 JDK와 안드로이드 SDK, 그리고 이클립스를 설치했다.
이어 안드로이드 프로요 풀소스를 다운로드 받아, make명령으로 빌드했고, 빌드된 풀소스를 이클립스의 프로젝트로 불러왔으나 에러가 발생한다. 이러한 에러에 대한 대처방법을 구글 그룹스에서 'Quiring, Sam'이 제시한다.
아래내용을 토대로 처리하면 문제해결이 가능하다.

추신.
오전에 관련자료를 검색하던중, 국내 유일하게 검색되던 블로그의 경로를 함께 기록한다.
내 경우에는 정상적으로 에러를 해결하지는 못하였다.
http://songdroid.blogspot.com/2010/07/android-full-source-comile-and.html


Here is one way:

1. In Eclipse get into the Java perspective on the Android froyo source
   (http://source.android.com/source/using-eclipse.html)
2. In the Eclipse Package Explorer expand the folder: packages/providers/CalendarProvider/src
3. expand the package: com.android.providers.calendar
4. right click on the package com.android.providers.calendar, this brings up a context menu
5. select "new file"
6. In the top 1/2 of the "New File" menu you see the destination
                                                                              - where the link to the file will be put
7. bottom left: click the "Advanced >>" button, this exposes a checkbox:
                                                                              "Link to file in the file system"
8. check that checkbox.  This makes a "Browse..." button become active.
9. click the "Browse..." button, browse to and select the file
          (e.g.,out/target/common/obj/APPS/CalendarProvider_intermediates/
                                src/src/com/andro id/providers/calendar/EventLogTags.java)
10 click OK (in "Select Link Target" window)
11. click Finish (in "New File")

The file (EventLogTags.java) should now appear in the package as a Java class.  The Java class icon will have a little arrow in the lower right, pointing toward the upper left.
Good luck.

참고 : http://groups.google.com/group/android-platform/browse_thread/thread/5c86d1f1929eed3c?pli=1

[Android] EditText의 최대 입력 가능 길이 제한에 관한 코드

EditText를 이용하여 텍스트를 입력 받을 때 특정한 길이만큼 제한을 줄 필요가 있다.

상위클래스인 TextView의 android:maxLength라는 xml attribute를 이용해도 되겠지만,
xml의 layout을 사용하지 않고 code상에서 구현을 할 수도 있다. 당연히.......ㅎㅎ
editor = new EditText(this);
editor.setSingleLine();
int maxLength = 32;
InputFilter[] filterArray = new InputFilter[1];
filterArray[0] = new InputFilter.LengthFilter(maxLength);
editor.setFilters(filterArray);
요렇게 하면 한줄로 된, 32글자까지 입력을 받을 수 있는 EditText를 만들 수 있다. ^^

출처 : http://chaotic21c.egloos.com/10537099