소켓 프로그래밍 client에서 여러 서버에 동시에 접속하려면?

jkseong의 이미지

여러대의 서버에 동시에 접속하는 클라이언트를 구현해보고자 합니다.
우선, 여러 socket을 열어서 하는 방법을 생각해 보기는 했는데,
아무래도 확장성이나 기타등등(?)의 문제가 발생할것으로 예상이되서요
흔히 이런 경우에 사용하는 방법이 없는지 궁금합니다.

불량청년의 이미지

일단 클라이언트가 동시에 여러 서버와 접속을 하려면

여러서버에 대한 정보를 담고 있는 엑티브맵을 갖고 있어야 합니다.

보통 connect(); 호출을 하면 서버에 접속해서 서버 정보를 갖고와

이 엑티브맵을 채우게 되는데... 님이 고민하시는 방법으로는

해결할 방법이 제 수준에서는 생각이 안나는군요.

하지만, 각 서버 정보를 담을 구조체와 소켓 디스크립터를 만들어 놓고

연결 할 때마다 이 디스크립터를 사용하면 가능 할꺼 같기도 하네요.

클라이언트가 여러 서버와 통신을 위해선, 서버의 정보를 계속

갖고 있어야 함으로... 님께서 서두에 말씀하신 방법밖에 없을꺼

같습니다.

PS : UDP로 해당 서버의 정보를 갖고 있으면서

연결 할 때만 그것을 쓰면 될꺼 같기도 하네요.

H/W가 컴퓨터의 심장이라면 S/W는 컴퓨터의 영혼이다!

jkseong의 이미지

굳이 클라이언트를 통해서 구현하려고한 이유는
접속하는 과정까지 서버쪽에서 관리하려고 했었는데,
생각해보니, 접속의 여부만으로도 해결이 될꺼 같네요
비슷한 경우..
하나의 컴퓨터가 다른 여러대의 컴퓨터와 네트웍 통신을 하는
중신이 되고자 할때에는 어떤 방식으로 구현하는 것이 나을까요?
지금은 클라리언트로 중심을 구현해 보려고 했었는데
그냥 중심의 컴퓨터를 서버로 구현하는 것이 나을까요?

kdoll의 이미지

서버사이드 에서 단일 프로세스로 하신다면

select가 를 사용하신다면 적절할듯 하네요..

소켓을 nonbolcking으로 만들고

connect호출후 해당 소켓을 select하면 됩니다..

참 write set에서 신호가 옵니다. connect의 경우는 .

그리고 중심에 속한다라면..

완전 nonblock의 형태로 모든 오퍼레이션을 처리해야 의도되지 않은 멈춤을 막을수 있습니다.

아 select는 당근 블럭이 좋져..

recv, send, read.. 등은 nonblock

아님 자원 낭비를 조금은 각오 하시구.. 멀티(프/쓰)로 하심도....

cpu 갯수 맞추어서 해보세염..

개발/유지보수 하기 쉬운 방법으로요..
(서버에서 하든 클라이언트에서 하든 상관 없으니까요.)

cjy1126의 이미지

제 짧은 생각으로는 UDP를 사용하셔야할듯 합니다.

TCP를 사용하려면 연결유지를 위해서 socket을 열어놔야 하니까요.

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.