[완료]c non-block 소켓으로 서버를 만들려 합니다.. 타임아웃 부분의 구현을 어떤식으로 해야 할지 조언 부탁드려요,

zzang3757의 이미지

읽어주신 분들 우선 감사드립니다

제목 처럼 c언어 non-block 소켓으로 서버를 만들려 합니다.

처음엔 프로세스 풀을 생성 후에 각 프로세스에서 쓰레드 풀을 생성하여

부모 프로세스 - 자식 프로세스1 - 쓰레드1
- 쓰레드2
- ....
- 쓰레드n

- 자식 프로세스2 - 쓰레드1
- 쓰레드2
- ....
- 쓰레드n

- 자식 프로세스n - 쓰레드1
- 쓰레드2
- ....
- 쓰레드n

이런식으로 생성을 하여 쓰레드 마다 클라이언트 한명씩 통신을 하게 하려 했습니다.

쓰레드마다 epoll 이나 select 등을 사용하여 타임설정 후 write 후에 select/epoll 에서 지정한 시간만큼 동안 이벤트가 발생하지 않으면 타임아웃으로 처리하려했으나,,
위와 같은 방법에 context switching 과정에서 많은 부하가 따를것 같아서..

부모 프로세스에서 여러 쓰레드를 생성후에 쓰레드마다 n개의 클라이언트가 연결되도록 하려 합니다..
쓰레드마다 역시 epoll이나 select를 사용하구요..

예를들어서,,

1번 쓰레드에 50명이 연결되어 있는데,,, 첫번째 사용자에게 데이터를 보낸 후 몇초 동안 응답이 없으면 데이터를 재전송 해주려고 합니다.
최초 방법에선 쓰레드당 1명이 연결되므로 타임아웃 관리하기가 편했는데,, 쓰레드당 여려명이 연결되면 이벤트가 수시로 발생할 것 같은데,, 어떤 식으로 타임아웃을 구현해야 할지
조언 부탁드립니다.

IsExist의 이미지

일단 한 스레드가 여려개의 소켓을 감시해야 하고 각 소켓마다 타임아웃 관리할려면
(소켓,마지막 응답시각) 을 둬야 합니다.

이제 이 값을 기반으로 주기적으로 감시(1)하거나 가장 최소 시각으로 감시(2)하거 하겠지요.

(1)번의 경우 1초 단위로 select난 epoll을 걸고 매번 저 목록을 갱신합니다.
(2)번의 경우 (소켓, 응답시각) 목록에서 타임아웃이 발생할 최소 시각을 구해서 그 값만큼만
select/epoll 의 timeout 시각으로 사용하면 됩니다. 이 경우 저 목록을 타임아웃 시각으로
소팅해서 관리하거나 또는 현재 접속된(관리하고 있는) 클라이언트 만큼 루프를 돌면 되구요.

---------
간디가 말한 우리를 파괴시키는 7가지 요소

첫째, 노동 없는 부(富)/둘째, 양심 없는 쾌락
셋째, 인격 없는 지! 식/넷째, 윤리 없는 비지니스

이익추구를 위해서라면..

다섯째, 인성(人性)없는 과학
여섯째, 희생 없는 종교/일곱째, 신념 없는 정치

댓글 달기

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