#거래소 & Koscom 데이타를 보내는쪽은 Nagle 알고리즘을 적용한다.
#거래소 & Koscom 데이타를 보내는쪽은 Nagle 알고리즘을 적용한다.

#거래소 & Koscom
데이타를 송신하는부분에서
#send(102 byte)
#send(102 byte)
#send(102 byte)
#send(102 byte)
#send(102 byte)

#거래소 & Koscom 데이타를 수신하는쪽은
#recv = 102 * 1 byte
#recv = 102 * 4 byte
임을 보인다.

혹시라도, #거래소 & Koscom 데이타를 보내는쪽에서 Nagle 알고리즘을 적용하지 않는다면
비고) 송신하는 프로그램에서 다음의 코드를 추가하면, Nagle 알고리즘을 적용하지 않는다.
#include<netinet/tcp.h>
char on=1;
if(setsockopt(sock,OPPROTO_TCP,TCP_NODELAY,(char *)&on,sizeof(on))<0) printf("error!!\n");

#거래소 & Koscom데이타를 송신하는부분에서
#send(102 byte)
#send(102 byte)
#send(102 byte)
#send(102 byte)
#send(102 byte)

#거래소 & Koscom데이타를 수신하는쪽은
#recv = 102 byte
#recv = 102 byte
#recv = 102 byte
#recv = 102 byte
#recv = 102 byte
임을 보인다. 

#Nagle 알고리즘에 대해서 알아본다.

Nagle알고리즘? 네트워크 상에 패킷의 수를 줄이기 위해 개발된 알고리즘

1. 일반 네트워크 통신방법
- 일반적인 통신알고리즘은 데이터는 패킷으로 만들어 보낸다는 것이며 수신호스트는 이에 대한 ACK를 보낸다는 것입니다. 
예를 들어, A,B 두 호스트가 통신을 합니다. A는 B에게 'Nagle'라는 데이터를 보내기 원하면, 
먼저 'N'이라는 데이터를 패킷으로 만들어 출력버퍼로 보냅니다. 
그리고 ACK를 받고 안받고 관계없이 'a'를 패킷으로 만들어 보내고 이어서 'g', 'l', 'e' 각 데이터를 패킷으로 만들어 보낼 것입니다. 
수신호스트로부터의 ACK가 언제 오는가는 전혀 관계가 없고, 언제 오든지 오기만 하면 되는 것입니다.

2. Nagle 알고리즘
- 네트웍에서 Nagle 알고리즘은 "가능하면 조금씩 여러 번 보내지 말고 한번에 많이 보내라(Effective TCP)" 라는 원칙을 기반으로 만들어진 알고리즘입니다.
- Nagle 알고리즘의 원리는 ACK를 받은 다음에 데이터를 보내고 ACK를 받을 때까지 출력버퍼의 데이터를 저장하였다가 ACK를 받으면 버퍼의 데이터를 모두 패킷으로 만들어 보낸다는 것입니다. 
예를 들어 A가 'N'이라는 데이터를 패킷으로 만들어 보내고, 계속해서 다음 데이터를 보내는 것이 아니라 출력버퍼로 보내어 저장시켜 둡니다. 
그러다가 ACK가 오면 출력버퍼에 저장된 'agle'라는 데이터를 보냅니다.

 

 

- TCP 소켓은 Default로 Nagle 알고리즘을 적용하고 있습니다.

3. Nagle 알고리즘의 장단점
  - 장점 : 네트워크의 효율성이 높아짐. (똑같은 데이터를 보내더라도 생산하는 패킷이 적음)
  - 단점 : 송신 호스트가 ACK를 받을 때까지 기다려야 하므로 전송 속도가 느려짐

4. Nagle 알고리즘의 중단
  - 몇몇 네트웍 관련 프로그램에서는 네트웍의 전송량이나 부하보다는 빠른 응답속도를 더 중요시 여기는 상황이 있습니다. 
  그러한 때에는 TCP_NODELAY  라는 옵션을 사용하여 Nagle 알고리즘을 제거 할 수 있습니다.
  - TCP_NODELAY 옵션이
     1(TRUE) : Nagle 알고리즘을 적용하지 않습니다.
     2(FALSE): Nagle 알고리즘을 적용합니다.

int opt_val = TRUE;
setsockopt(sock, IPPROTO_TCP, TCP_NODELAY, &opt_val, sizeof(opt_val));

해당 옵션의 사용은 네트웍 부하를 극대화 시켜주면서 서버의 전체적인 성능을 무척 감소하기때문에 꼭 필요한 경우에만 매우 주의를 해서 사용해야 합니다.
- 전송은 작은 단위로 자주 이루어지지만 즉각적인 응답은 필요 없는 어플리케이션에서만 사용 되어야 합니다.(마우스 움직임 같은)
- Nagle 알고리즘은 리얼타임시스템에서의 제어와 특히나 인터렉티브한 키 입력을 하는 어플리케이션에서는 안 좋은 영향을 미칩니다. 
선택적으로 Nagle 알고리즘을 통과하는 한가지 방법은 Out-of-bind 메시지 시스템을 쓰는 것입니다. 
그러나 이것은 내용물에 제약이 있고 또 다른 문제(순서의 상실: loss of sequentiality)를 일으킬 수 있습니다.

#거래소 & Koscom tcp 데이타를 서버에서 받을때에 모습(송신쪽에서 Nagle On일경우)

 

#거래소 & Koscom tcp 데이타를 서버에서 받을때에 모습(송신쪽에서 Nagle Off일경우)

소스파트)
int sd, ret, on=1,off=0, sz_sbuf;

/* added to options of socket by Changseop Oh from CheongJo */

/* Now >>>> nagle off -----------------*/
/* Now >>>> nagle off -----------------*/
/* Now >>>> nagle off -----------------*/
if(setsockopt(sd,SOL_SOCKET,SO_REUSEADDR,(char*)&off,sizeof(on))<0)
sprintf(ebuf, "setsockopt() : REUSEADDR setting Error!");

#증권정보 홈페이지 구성 단계별 데이타 처리과정

-Master
1. 거래소&Koscom -> RcvTData(Tcp) -> ReadQBatch -> Shared Memory(Kse,Kosdaq,Elw,Jisu,Konex Master), MySQL
2. 거래소&Koscom -> RcvTData(Tcp) -> ReadQFutureBatch -> Shared Memory(K200 Future Master), MySQL
3. 거래소&Koscom -> RcvTData(Tcp) -> ReadQOptionBatch -> Shared Memory(K200 Option Master), MySQL

-Chegyul,Hoga,Trade,Jongga,Jisu 등등
4. 거래소&Koscom -> RcvTData(Tcp) -> ReadQData -> Shared Memory(Kse,Kosdaq,Elw,Jisu,Konex)
5. 거래소&Koscom -> RcvTData(Tcp) -> ReadQFutureData -> Shared Memory(K200 Future)
6. 거래소&Koscom -> RcvTData(Tcp) -> ReadQOptionData -> Shared Memory(K200 Option)

7. Shared Memory(Kse,Kosdaq,Elw,Jisu,Konex) -> Jni -> Java -> jsp -> WebBrowser
- final sise, full jisu
8. Shared Memory(K200 Future) -> Jni -> Java -> jsp -> WebBrowser
- final sise
9. Shared Memory(K200 Option) -> Jni -> Java -> jsp -> WebBrowser
- final sise
10. Shared Memory(Common) -> Jni -> Java -> jsp -> WebBrowser
- final statistics

11. Shared Memory(Kse,Kosdaq,Elw,Jisu,Konex) -> SHELL -> MySQL -> Java -> jsp -> WebBrowser
- minute sise, minute jisu
12. Shared Memory(K200 Future) -> SHELL -> MySQL -> Java -> jsp -> WebBrowser
- minute sise
13. Shared Memory(K200 Option) -> SHELL -> MySQL -> Java -> jsp -> WebBrowser
- minute sise

 

#자바 네이티브 인터페이스(Java Native Interface, JNI)

자바 네이티브 인터페이스(Java Native Interface, JNI)는 자바 가상 머신(JVM)위에서 실행되고 있는 자바코드가 네이티브 응용 프로그램(하드웨어와 운영 체제 플랫폼에 종속된 프로그램들) 그리고 C, C++ 그리고 어샘블리 같은 다른 언어들로 작성된 라이브러리들을 호출하거나 반대로 호출되는 것을 가능하게 하는 프로그래밍 프레임워크이다.

1. 증권정보홈페이지에서 JNI사용하기
1.1 RcvTData -> ReadQData -> Shared Memory(Linux)
1.2 Shared Memory(Linux)를 java를 이용해서 HTML로 보여주기 위해서는 JNI가 필요하다.

1.3 Shared Memory(Linux)를 참조하는 함수(윈도우에서 DLL과 동일)를, 즉 so파일로 만들어야 한다.
1.4 지수,주식,elw,공통의 4가지 so파일로 만들기로 한다.
1.5 libCommonShm.so, libElwShm.so, libJongShm.so, libJisuShm.so 로 만든다.

1.7 즉 결론적으로 Shared Memory(증권정보데이타)를 java에서 호출, 데이타를 사용할수 있다.

사용예)
JongmokMast ksejmast = new JongmokMast();
ksejmast.setMemType(21);
ksejmast.setMarket("A");
ksejmast.setCode("A005930");
ksejmast.setData();

ShmMap_JMAST shm_jmast = new ShmMap_JMAST();
shm_jmast.setCommarea(ksejmast.getData());

String kijun = shm_jmast.get(shm_jmast.KIJUN);
String hyun = shm_jmast.get(shm_jmast.HYUN);
String open = shm_jmast.get(shm_jmast.OPEN);
String jang_flag = shm_jmast.get(shm_jmast.JANG_FLAG);

#Ubuntu 18.04 apache-tomcat-**** & apache2 설치및 연동

1. 설정1
root@stock:/usr/local/tomcat8/conf# which java
/usr/local/jdk1.8.0_202/bin/java
root@stock:/usr/local/tomcat8/conf#

JAVA_HOME=/usr/local/jdk1.8.0_202로 설정한다.

2. 설정2
<Host name="localhost"  appBase="webapps"
      unpackWARs="true" autoDeploy="true">
<Context path="" docBase="/web/httpd/hexahtdocs" reloadable="true"/>
</Host>

3. 확인
http://19.168.0.37:8080
http://19.168.0.37:8080/common_sise/lower_rate.jsp?market=A


#install reference

 

apache_tomcat_9_install_guide.txt
0.01MB


#우분투 버전 역사
#LTS(Long Term Support)


우분투의 버전은 배포판이 나온 연도와 달로 매긴다. 
7.10은 2007년 10월, 8.04는 2008년 4월에 나온 버전이다. 
각 버전은 알파벳 순서로(6.06 LTS부터) 만든 형용사와 명사의 조합으로 코드명이 붙는다. 
7.10은 G에서 만든 Gutsy Gibbon이라는 이름이 붙으며, 
8.04는 H에서 Hardy Heron, 8.10은 I에서 Intrepid Ibex이다. 
처음 세개의 버전을 제외한 나머지 버전은 알파벳 순서로 명명되어서 사용자들이 버전 순서를 파악하는 데 용이하게 했다. 
LTS(Long Term Support)는 장기 지원 버전으로, 
4번에 한 번, 즉 원칙적으로 2년에 한 번씩 나온다. 
현재 가장 최신 버전의 LTS는 18.04이다. 10년간 장기지원한다.

manual.zip
1.56MB


각 버전별 지원 기간은 12.10까지는 1년 6개월이다. 
13.04부터는 9개월로 지원 기간이 단축되었지만 짝수 연도 상반기마다 나오는 장기지원버전(LTS)은 모든 버전을 늘어난 5년간 지원하도록 정책이 바뀌었다. 
처음에는 데스크톱판이 3년으로, 서버판이 5년으로 차별화되어 있었으나, 
12.04 버전부터 둘 다 5년으로 일원화돠었다. 
19LTS 버전부터는 10년간으로 늘어났다. 
이러한 정책의 밑바탕이 되는 주기적이고 장기적인 버전을 통한 LTS기술의 축적은 특별한 보안이 요구되는 금융등 산업계에서 장기적이고 안정된 IT 관리를 위한 매우 적절한 조처다.

#Linux Tettris 소스코드(배열모양:4 * 4)

#언어: c

#필요라이브러리:libncurses.a

#make link option: -lncurses

 

>원리

LEFT 이동시에 1보다 큰 값이 있으면 LEFT 이동이 불가능하다.

 

 

 

linux_tris_time_4_4.c
0.01MB

- c# windows console hexa, tettris code(IDE:editor,Compiler:csc) - frm version
- c# windows console hexa, tettris code(IDE:editor,Compiler:csc) - frm version
- c# windows console hexa, tettris code(IDE:editor,Compiler:csc) - frm version
- c# windows console hexa, tettris code(IDE:editor,Compiler:csc) - frm version

using statistics search(BackgroundWorker)
using statistics search(BackgroundWorker)
using statistics search(BackgroundWorker)

frm_tris_4_4.cs
0.01MB

 

simple tris + windows form edition

 

tris_frm_4_4_1.cs
0.01MB

- c# windos console hexa, tettris code(IDE:editor,Compiler:csc) - console version
- c# windos console hexa, tettris code(IDE:editor,Compiler:csc) - console version
- c# windos console hexa, tettris code(IDE:editor,Compiler:csc) - console version
_ using Console.SetCursorPosition()
_ using Console.SetCursorPosition()
_ using Console.SetCursorPosition()

 

tris_4_4.cs
0.01MB

- c# windows console hexa, tettris code(IDE:editor,Compiler:csc) - console version
- c# windows console hexa, tettris code(IDE:editor,Compiler:csc) - console version
- c# windows console hexa, tettris code(IDE:editor,Compiler:csc) - console version
- only useing Console.WriteLine()
- only useing Console.WriteLine()
- only useing Console.WriteLine()

 

pure_tris_4_4.cs
0.01MB


- c,c++ windows console hexa, tettris code(IDE:editor,Compiler:gcc)
- c,c++ windows console hexa, tettris code(IDE:editor,Compiler:gcc)
- c,c++ windows console hexa, tettris code(IDE:editor,Compiler:gcc)

 

mainsrc.c
0.00MB
common.h
0.00MB
common.c
0.01MB

 

- c# frm & feat.console & text draw version

frm_txt_draw.cs
0.02MB


- pascal window form hexa, tettris code(IDE:DELPHI) 


- javascript web-browser hexa, tettris code(IDE:editor)
- javascript web-browser hexa, tettris code(IDE:editor)
- javascript web-browser hexa, tettris code(IDE:editor)

____no_ajax_tris_4_4.html
0.02MB
____real_fast_no_ajax_tris.html
0.02MB


- c,c++ windows console tettris code(IDE:edit)
- c,c++ windows console tettris code(IDE:edit)
- c,c++ windows console tettris code(IDE:edit)

tris_basic_4_4.c
0.01MB

- c,c++ windows console tettris code(IDE:edit) - time_tick using thread
- c,c++ windows console tettris code(IDE:edit) - time_tick using thread
- c,c++ windows console tettris code(IDE:edit) - time_tick using thread

tris_thread_4_4.bat
0.00MB
tris_thread_4_4.c
0.01MB



- java console hexa, tettris code(IDE:editor,Compiler:javac)

2. Linux(Ubuntu,Centos)
- c,c++ console hexa, tettris code(IDE:editor,Compiler:gcc,실행도구:telnet terminal)
- javascript web-browser hexa, tettris code(IDE:editor,실행도구:desktop mode)

3. Windows 10 + Linux was(tomcat)
- javascript web-browser network hexa, tettris code(feat. AJAX)



# Compiler
1. windows 10 c# console - csc(freeware)
2. windows 10 c# form - visual studio(freeware at private, but company is not free)

3. windows 10 c,c++ console - gcc(freeware)
4. windows 10 c,c++ form - visual studio(freeware at private, but company is not free)

5. windows 10 pascal form - DELPHI (freeware at private, but company is not free)
6. windows 10, Linux javascript - web-browser is OK


Question into xterm92@naver.com

curses.h: No such file or directory

RHEL / Fedora / CentOS
>yum install ncurses-devel ncurses

Debian / Ubuntu
>apt-get install libncurses5-dev libncursesw5-dev

빌드할 때, -lncurses 옵션을 붙여줘야 올바르게 컴파일 할 수 있다.
gcc -o program program.c -lncurses

#대표적인 프로그램으로는 linux >top명령어에 의한 화면일것이다.

+ Recent posts