여러대의 서버에 동시에 접속하는 클라이언트를 구현해보고자 합니다. 우선, 여러 socket을 열어서 하는 방법을 생각해 보기는 했는데, 아무래도 확장성이나 기타등등(?)의 문제가 발생할것으로 예상이되서요 흔히 이런 경우에 사용하는 방법이 없는지 궁금합니다.
일단 클라이언트가 동시에 여러 서버와 접속을 하려면
여러서버에 대한 정보를 담고 있는 엑티브맵을 갖고 있어야 합니다.
보통 connect(); 호출을 하면 서버에 접속해서 서버 정보를 갖고와
이 엑티브맵을 채우게 되는데... 님이 고민하시는 방법으로는
해결할 방법이 제 수준에서는 생각이 안나는군요.
하지만, 각 서버 정보를 담을 구조체와 소켓 디스크립터를 만들어 놓고
연결 할 때마다 이 디스크립터를 사용하면 가능 할꺼 같기도 하네요.
클라이언트가 여러 서버와 통신을 위해선, 서버의 정보를 계속
갖고 있어야 함으로... 님께서 서두에 말씀하신 방법밖에 없을꺼
같습니다.
PS : UDP로 해당 서버의 정보를 갖고 있으면서
연결 할 때만 그것을 쓰면 될꺼 같기도 하네요.
H/W가 컴퓨터의 심장이라면 S/W는 컴퓨터의 영혼이다!
굳이 클라이언트를 통해서 구현하려고한 이유는 접속하는 과정까지 서버쪽에서 관리하려고 했었는데, 생각해보니, 접속의 여부만으로도 해결이 될꺼 같네요 비슷한 경우.. 하나의 컴퓨터가 다른 여러대의 컴퓨터와 네트웍 통신을 하는 중신이 되고자 할때에는 어떤 방식으로 구현하는 것이 나을까요? 지금은 클라리언트로 중심을 구현해 보려고 했었는데 그냥 중심의 컴퓨터를 서버로 구현하는 것이 나을까요?
서버사이드 에서 단일 프로세스로 하신다면
select가 를 사용하신다면 적절할듯 하네요..
소켓을 nonbolcking으로 만들고
connect호출후 해당 소켓을 select하면 됩니다..
참 write set에서 신호가 옵니다. connect의 경우는 .
그리고 중심에 속한다라면..
완전 nonblock의 형태로 모든 오퍼레이션을 처리해야 의도되지 않은 멈춤을 막을수 있습니다.
아 select는 당근 블럭이 좋져..
recv, send, read.. 등은 nonblock
아님 자원 낭비를 조금은 각오 하시구.. 멀티(프/쓰)로 하심도....
cpu 갯수 맞추어서 해보세염..
개발/유지보수 하기 쉬운 방법으로요.. (서버에서 하든 클라이언트에서 하든 상관 없으니까요.)
제 짧은 생각으로는 UDP를 사용하셔야할듯 합니다.
TCP를 사용하려면 연결유지를 위해서 socket을 열어놔야 하니까요.
텍스트 포맷에 대한 자세한 정보
<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]
제 생각입니다.
일단 클라이언트가 동시에 여러 서버와 접속을 하려면
여러서버에 대한 정보를 담고 있는 엑티브맵을 갖고 있어야 합니다.
보통 connect(); 호출을 하면 서버에 접속해서 서버 정보를 갖고와
이 엑티브맵을 채우게 되는데... 님이 고민하시는 방법으로는
해결할 방법이 제 수준에서는 생각이 안나는군요.
하지만, 각 서버 정보를 담을 구조체와 소켓 디스크립터를 만들어 놓고
연결 할 때마다 이 디스크립터를 사용하면 가능 할꺼 같기도 하네요.
클라이언트가 여러 서버와 통신을 위해선, 서버의 정보를 계속
갖고 있어야 함으로... 님께서 서두에 말씀하신 방법밖에 없을꺼
같습니다.
PS : UDP로 해당 서버의 정보를 갖고 있으면서
연결 할 때만 그것을 쓰면 될꺼 같기도 하네요.
H/W가 컴퓨터의 심장이라면 S/W는 컴퓨터의 영혼이다!
굳이 클라이언트를 통해서 구현하려고한 이유는접속하는 과정까지 서버쪽에
굳이 클라이언트를 통해서 구현하려고한 이유는
접속하는 과정까지 서버쪽에서 관리하려고 했었는데,
생각해보니, 접속의 여부만으로도 해결이 될꺼 같네요
비슷한 경우..
하나의 컴퓨터가 다른 여러대의 컴퓨터와 네트웍 통신을 하는
중신이 되고자 할때에는 어떤 방식으로 구현하는 것이 나을까요?
지금은 클라리언트로 중심을 구현해 보려고 했었는데
그냥 중심의 컴퓨터를 서버로 구현하는 것이 나을까요?
서버사이드 에서 단일 프로세스로 하신다면select가 를 사용하신
서버사이드 에서 단일 프로세스로 하신다면
select가 를 사용하신다면 적절할듯 하네요..
소켓을 nonbolcking으로 만들고
connect호출후 해당 소켓을 select하면 됩니다..
참 write set에서 신호가 옵니다. connect의 경우는 .
그리고 중심에 속한다라면..
완전 nonblock의 형태로 모든 오퍼레이션을 처리해야 의도되지 않은 멈춤을 막을수 있습니다.
아 select는 당근 블럭이 좋져..
recv, send, read.. 등은 nonblock
아님 자원 낭비를 조금은 각오 하시구.. 멀티(프/쓰)로 하심도....
cpu 갯수 맞추어서 해보세염..
개발/유지보수 하기 쉬운 방법으로요..
(서버에서 하든 클라이언트에서 하든 상관 없으니까요.)
여러대의 서버에 동시에 접속하는 client...
제 짧은 생각으로는 UDP를 사용하셔야할듯 합니다.
TCP를 사용하려면 연결유지를 위해서 socket을 열어놔야 하니까요.
댓글 달기