클라이언트 접속 처리 질문..

hcjung의 이미지

서버에서 여러개의 클라이언트 접속을 받아 클라이언트에서 요구하는 데이타를

전송해주는 서버를 만들고자 합니다.

서버 소켓을 생성하고 클라이언트 접속을 감시하는 쓰레드를 생성했습니다.

클라이언트 접속시 각 클라이언트로부터 데이타가 들어오는지 감시하는

쓰레드를 만들고요... 이렇게 하니 3개의 클라이언트만 접속해도 쓰레드가

4개가 생성된 셈입니다. 문제는 프로그램이 많이 느려지네요.

제가 하는 방식에 문제가 있는건지요? 쓰레드를 사용하지 않고 데이타가 들어오는지

감시 할 수 있습니까? 고수님들 조언 부탁드립니다.

harisoo의 이미지

부모 프로세스가 클라이언트가 접속시 쓰레드를 만들어서 할당해줍니다.
부모는 접속하면 단지 연결만 해주는 역할이죠.

그런데 위에서 하는 방식으로 부모가 하지 않고 쓰레들 하나 만들어서 데이터가 들어오는지 체크를 하고 쓰레드를 생성하는것이라면... 메모리가 모자를수도 잇습니다.

예를 들면 이런거죠.
1개의 클라이언트가 접속을 햇습니다. 그래서 서버에서 쓰레드를 만들어서 연결을 햇습니다. 그런데 이 클라이언트가 데이터를 보내는군요. 그럼 클라이언트로부터 데이터가 들어오는지 감시하는 쓰레드는 다시 쓰레드를 만들겟군요.
즉 클라이언트가 데이터를 보낼때마다 쓰레드를 만든다면 1개의 클라이언트가 접속을 하더라도 쓰레드가 계속 생겨나는것이죠.

mach의 이미지

서버를 만드는 많은 방법중에,....
전형적인 멀티쓰레드 서버를 만들고 있는 셈입니다.

지금 현재방식대로 하시되, 총 쓰레드의 개수를 지정하고(접속가능한 수) 특정 개수가 넘으면 더이상 accept()하지 않거나, accept()후 클라이언트에게 힘들어서 못하겠다등의 메시지 보내고 끊어버리게 하는등의 테크닉을 구사할 수 있습니다.

서버의 기능 환경등에 따라서, 성능 문제를 고려할 수 있습니다. 하드웨어를 업그레이드 하거나, 아니면 프로그래밍 모델을 바꿔야 겠지요. 풀고자 하는 문제에 따라서, 그 선택은 많이 바뀌므로, 섣부른 답변을 드리기는 어렵습니다.

------------------ P.S. --------------
지식은 오픈해서 검증받아야 산지식이된다고 동네 아저씨가 그러더라.

------------------ P.S. --------------
지식은 오픈해서 검증받아야 산지식이된다고 동네 아저씨가 그러더라.

ㅡ,.ㅡ;;의 이미지

웬만해선 쓰래드 몇개 불렸다고 느려지거나 하지 않는데...
먼가 다른문제가 있을듯..
그리고 보통은 쓰레드생성해서 감시하거나 하지 않고 그냥 감시하는데.


----------------------------------------------------------------------------

Anonymou의 이미지

클라이언트의 요청에 대한 응답의 부하에 따라 적절한 응답 처리 스레드 갯수를
한정하고 접속을 관리하는 스레드는 접속만 하고 그 연결은 계속 유지
시킵니다. 연결 관리는 링크드 리스트나 포인터 배열을 사용하거나 해도
되구요.

응답처리 스레드는 항상 풀을 주기적으로 접속 풀을 감시하면서 해당 연결을
얻어와서 응답을 처리하면 됩니다.

댓글 달기

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