중계 서버를 구현하고자 합니다..

yangsg의 이미지

중계 서버를 구현하고자 합니다..
최종 목표는 200~300 <--> 중계서버 <--> 2000~10000 입니다..

우선은 A <-> 중계서버 <-> B를 구현할려고 합니다..
중계서버는 A에서 요청한걸 응답하기도 하고 B로 던지기도 합니다.. B에서도 마찬가지입니다..

처음으로 생각한것이 두개의 프로그램을 만듭니다.. A쪽을 listen하는 부분.. B쪽을 listen하는 부분..
그리고 pipe, fifo를 이용해서 구현할려고 했습니다..
그런데 한쪽에서 mkfifo를 이용해서 파이프를 생성하니 listen을 하지 않았습니다..
지식이 부족하여 어찌 처리할지 몰라.. 다른 방법을 생각하게 되었습니다..

두번째 생각한 것이 메인 프로세스에서 두개의 소켓을 열어서 두 소켓을 다 listen 상태로 두고 그리고 select를 이용하여
중계를 해 볼려고 했습니다.. 이걸 쫌 어떻게 구현해야 할지...

세번째 생각한 것이 메인 프로세스에서 한쪽을 listen하고 fork를 이용해서 자식 프로세스에서 다른쪽을 listen하고
그리고 각각 watch thread를 이용해서 구현하면 될련지...

도통.. 능력밖이라 어찌 구현해야할지 감을 잡지 못하고 있습니다..
참고 서적은.. 유명한 스티븐아저씨 책.. beej's guide.. 머 여러개를 읽고 있습니다만... 도통.. 감이 오질 않습니다...

충고 좀 해주시면 감사하겠습니다...
따끔한 충고도 감사히 받겠습니다....

rasungboy의 이미지

제 생각에서는 select 를 이용한 멀티플렉싱 IO 가 좋을것

같습니다.

중계서버는 LISTEN 소켓을 2개 열고 A 와 B 에서 중계서버로

접속하는 방식으로 말이죠. 셀렉트의 간단한 사용방법은

select 에서 이벤트가 감지되면 리슨소켓 리스트에서

어떤 소켓에서 이벤트가 발생했나 찾아서 이벤트 처리해주

면 됩니다.

또 다른방법으론 각 listen 소켓마다 스레드를 두어서

사용하는 방법인데 이 방법은 a 패킷을 b 로 중계할때

a 스레드에서 b 스레드로 패킷을 넘기면서 동기화 같은것도

신경써야 하기때문에 좀 더 복잡해질 가능성이 있습니다.

yangsg의 이미지

rasungboy님 답변 감사드립니다..

네.. 저도 select를 이용한 방법이 가장 간단할 듯하여서
지금 구현을 하고 있습니다...

그런데 나중에 차후에 200~300 : 2000~10000 정도의 중계서버로
사용할려면.. 다른 추가적인 작업이 많이 필요할듯합니다..

확장을 하기위해서는 어떤 방향으로 가면 좋을련지.. 충고부탁드립니다...

rasungboy의 이미지

shrrot wrote:
rasungboy님 답변 감사드립니다..

네.. 저도 select를 이용한 방법이 가장 간단할 듯하여서
지금 구현을 하고 있습니다...

그런데 나중에 차후에 200~300 : 2000~10000 정도의 중계서버로
사용할려면.. 다른 추가적인 작업이 많이 필요할듯합니다..

확장을 하기위해서는 어떤 방향으로 가면 좋을련지.. 충고부탁드립니다...

단순히 중계서버만 보자면 중계서버에는 2개의 커넥션밖에

걸리지 않습니다. a 의 커넥션과 b의 커넥션.

그래서 a 가 200-300 이든 b 가 2000~10000 이든 그건

a 와 b 의 문제이고 a,b 와 중계서버의 문제는 아니라는 것

이죠.

생각해볼건 a 와 b 의 처리용량이 커지면서 중계서버에

부담이 많이 가겟죠. 점점 오늘 패킷양은 많아질거고

더 많은 메모리가 필요해질겁니다.

처리용량이 많아질수록 응답속도도 떨어질거구요.

이부분은 계속 튜닝해가시면서 최적화 시키시면 될겁니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.