일반적인 Client-Server Socket 통신은 Sync 구조이다.
대부분 Server에서는 Client가 연결을 요청한 후 데이터를 보내기만을 기다린다.

따라서, 한번 Connection이 맺어지고 Client의 요청으로 들어온 데이터를 읽고 처리한 이후에는
Server에서는 Client에서 동일한 Connection으로 데이터를 보내도 알 수가 없다.
이것을 처리하기 위해서는 Server에서 Connection의 InputStream에 데이터가 있는지 없는지를 알기 위해 InputStream.available()을 통해 무한루프를 돌면서 감시하고 있어야 한다.

그 결과 컴퓨터의 CPU 리소스를 엄청 잡아 먹는다.
오늘날에야 멀티코어가 대세로 자리잡아서 코어 하나를 Connection을 유지하는 Thread하나에 할당해주면 된다지만, 분명 한계는 있다.

그래서 Connection의 InputStream으로 데이터가 들어올 때, Event로 데이터가 들어왔음을 알려주고, 그 이후 서버에서 InputStream을 읽어서 처리하도록 하기 위해서 Java NIO(Non-blocking I/O)를 이용하여 Socket Server 프로그램을 작성해 보았다.

로컬에 있는 Virtual Machine에서 테스트를 했기에 크게 의미 있는 데이터는 아니지만, 놀랍게도 5배 정도의 성능 향상을 보였다.

누군가는 Java NIO를 따로 공부하느니, Node.js를 사용하여 Socket Server를 만드는 것이 더 쉽다고 이야기하는 분들도 있지만, 처음 접하는 사람이라면 Node.js도 공부해야 한다.(-.-)

여하튼, 앞으로 프로그래밍의 대세는 Asyncronous한 Event Driven Approach인 것은 분명해 보인다.
받은 트랙백이 없고, 댓글이 없습니다.

댓글+트랙백 RSS :: http://www.yongbi.net/rss/response/563

한참 문서 작업을 하다가 Word를 종료할 때 뜨는 오류 문구 하나.
[Microsoft Word의 작동이 중지되었습니다.]

문서가 저장이 안 되는 줄 알고 깜짝 놀랐다.

해결책은 다음에서 볼 수 있다.
http://support.microsoft.com/kb/2665301/ko
그런데, Default로 Blooth와 연결되어 있던데 저거 설치할 때 설정 안되도록 하면 안되나?
아, 깜짝 놀랐네.
받은 트랙백이 없고, 댓글이 없습니다.

댓글+트랙백 RSS :: http://www.yongbi.net/rss/response/561

1. LuaJIT 2.0, Lua 5.1.5 설치

LuaJIT 2.0 다운로드 : luajit.org/download.html
Lua 5.1.4 다운로드 : www.lua.org/ftp/

1) Lua 설치
Lua 압축해제 : tar -zxvf lua-5.1.5.tar.gz
cd lua-5.1.5
make linux test
* 오류가 발생하면 yum으로 해당 라이브러리 설치
* Hello World, Lua 5.1!과 비슷한 메시지가 마지막에 출력되면 제대로 구성됨.
make linux
make install
* /usr/local/에 설치됨.

2) LuaJIT 설치
LuaJIT 압축해제 : tar -zxvf LuaJIT-2.0.1.tar.gz
cd LuaJIT-2.0.1
make
make install

3) .bash_profile 수정
export LUAJIT_LIB=/usr/local/lib
export LUAJIT_INC=/usr/local/include

2. Nginx 설치

Nginx 1.4.1 다운로드 : nginx.org
Ngx_devel_kit 다운로드(v0.2.18) : github.com/simpl/ngx_devel_kit/tags
Ngx_lua_module 다운로드 (v0.8.2) : github.com/chaoslawful/lua-nginx-module/tags

1) 각 다운로드 받은 패키지 압축 해제
Ngnix : tar -zxvf nginx-1.4.1.tar.gz
ngx_devel_kit : tar -zxvf ngx_devel_kit-0.2.18.tar.gz
ngx_lua : tar -zxvf lua-ngx-module-0.8.2.tar.gz

2) 폴더 명 변경
mv ngx_devel_kit-0.2.18 ngx_devel_kit
mv lua-ngx-module-0.8.2 lua-ngx-module

3) Nginx Config 설정
./configure --prefix=$HOME/nginx \
--conf-path=$HOME/nginx/conf/nginx.conf \
--sbin-path=$HOME/nginx/sbin/nginx \
--lock-path=$HOME/nginx/lock/nginx.lock \
--pid-path=$HOME/nginx/run/nginx.pid \
--http-client-body-temp-path=$HOME/nginx/lib/nginx/body \
--http-proxy-temp-path=$HOME/nginx/lib/nginx/proxy \
--http-fastcgi-temp-path=$HOME/nginx/lib/nginx/fastcgi \
--http-uwsgi-temp-path=$HOME/nginx/lib/nginx/uwsgi \
--http-scgi-temp-path=$HOME/nginx/lib/nginx/scgi \
--http-log-path=$HOME/nginx/logs/access.log \
--error-log-path=$HOME/nginx/logs/error.log \
--with-debug \
--with-http_addition_module \
--with-http_addition_module \
--with-http_degradation_module \
--with-http_flv_module \
--with-http_gzip_static_module \
--with-http_image_filter_module \
--with-http_mp4_module \
--with-http_random_index_module \
--with-http_realip_module \
--with-http_ssl_module \
--with-http_stub_status_module \
--with-http_sub_module \
--with-http_realip_module \
--add-module=$HOME/ngx_postgres \
--add-module=$HOME/ngx_http_auth_request_module \
--add-module=$HOME/nginx-eval-module \
--add-module=$HOME/lua-nginx-module \
--add-module=$HOME/ngx_devel_kit \
--user=nobody \
--group=nobody

4) 설치
make && make install

받은 트랙백이 없고, 댓글이 없습니다.

댓글+트랙백 RSS :: http://www.yongbi.net/rss/response/559

1. 소프트웨어 버전

Cent OS : 5.4
NginX : 1.2.8
Postgre Module : 최신버전 (https://github.com/FRiCKLE/ngx_postgres.git)

2. NginX 설치

1) 사전 필수 의존 라이브러리 설치
yum -y install gcc g++ cpp gcc-c++ pcre-devel openssl openssl-devel gd gd-devel

2) PostgreSQL 라이브러리 설치
yum -y install postgresql-*

3) NginX Configuration
./configure --prefix=$HOME/nginx \
--conf-path=$HOME/nginx/conf/nginx.conf \
--sbin-path=$HOME/nginx/sbin/nginx \
--lock-path=$HOME/nginx/lock/nginx.lock \
--pid-path=$HOME/nginx/run/nginx.pid \
--http-client-body-temp-path=$HOME/nginx/lib/nginx/body \
--http-proxy-temp-path=$HOME/nginx/lib/nginx/proxy \
--http-fastcgi-temp-path=$HOME/nginx/lib/nginx/fastcgi \
--http-uwsgi-temp-path=$HOME/nginx/lib/nginx/uwsgi \
--http-scgi-temp-path=$HOME/nginx/lib/nginx/scgi \
--http-log-path=$HOME/nginx/logs/access.log \
--error-log-path=$HOME/nginx/logs/error.log \
--with-http_addition_module \
--with-http_addition_module \
--with-http_degradation_module \
--with-http_flv_module \
--with-http_gzip_static_module \
--with-http_image_filter_module \
--with-http_mp4_module \
--with-http_random_index_module \
--with-http_realip_module \
--with-http_ssl_module \
--with-http_stub_status_module \
--with-http_sub_module \
--with-http_realip_module \
--add-module=$HOME/ngx_postgres \
--user=nobody \
--group=nobody

4) make && make install




받은 트랙백이 없고, 댓글이 없습니다.

댓글+트랙백 RSS :: http://www.yongbi.net/rss/response/558

1. OS 방화벽에서 5432 포트 오픈 (외부에서 TCP/IP 연결하기 위함)
2. data 폴더 아래의 postgresql.conf 파일 변경
listen_addresses = 'localhost' => listen_addresses = '*'
port = 5432

3. pg_hba.conf 파일 변경
host     all       all       0.0.0.0/0       trust
4. PostgreSQL 시작
./pg_ctl -D $HOME/pgsql/data start
받은 트랙백이 없고, 댓글이 없습니다.

댓글+트랙백 RSS :: http://www.yongbi.net/rss/response/556