One Process per One Client이용시 프로세스간 통신에 대해서

ungqum77의 이미지

하나의 클라이언트가 접속하면, 새로운 프로세스를 생성해서, 다자간 채팅 서버를 구성하고 있습니다(리눅스 처음배움...)
그런데... 배틀넷(스타)에서의 채널 처럼 관리 하려고 하는데요....

서로간의 통신이 안되는 군요...

파이프를 이용해 보려구 하는데요, 자식 과 부모 한개 사이의 활용만 나와 있는것 같구요...
기본적인 윈속의 개념을 이용해서 하려니까, 한계점에 다다릅니다.

저는 하나의 자식 프로세스가 계속 while을 하면서 read하는 형태로 코드를 짜 나갔습니다.

하나의 클라이언트에서 들어온 메시지(채팅글이되겠습니다.) 를 전체의 접속 클라이언트에게 동시에 보내려고 합니다.
해결 방법을 좀 구체적으로 적어 주세요 ^^
잘 부탁드립니다.

deisys의 이미지

음... 대답은 아니지만, 제 생각에는 One thread per one client 로 구현하는건
어떨까 하는데요. 대화방 하나에 프로세스 하나, 클라이언트하나에 스레드 하나...
이렇게 하는게 좀 쉬워질 수 있지 않을까요? 기본적으로 프로세스간 통신보다는
스레드간 통신히 더 수월하니(싱크문제는 빼고요..; 대화가 오가는 대화방 안의
클라이언트들로부터 듣고 뿌리는 것은 스레드를 이용해서 구현하는게 괜찮지
않을까 합니다...

- 원하시는 답변이 아니라 죄송합니다~

지리즈의 이미지

메세지 큐는 어떨까요?

There is no spoon. Neo from the Matrix 1999.

ssehoony의 이미지

한유저에 하나의 프로세스.. 채팅..
이거 제가 아시는 분이 예전에 하이텔 같은 텔넷 기반에서 채팅서버 만들어야할 상황일때 이야기인데 이거랑 비슷항 상황인가 보네요.
이거 공유메모리를 사용하셔서 상당히 빠른 포퍼먼스를 얻으셨다고 하시는 것 같던군요.

jolasen의 이미지

ungqum77 wrote:
하나의 클라이언트가 접속하면, 새로운 프로세스를 생성해서, 다자간 채팅 서버를 구성하고 있습니다(리눅스 처음배움...)
그런데... 배틀넷(스타)에서의 채널 처럼 관리 하려고 하는데요....

서로간의 통신이 안되는 군요...

파이프를 이용해 보려구 하는데요, 자식 과 부모 한개 사이의 활용만 나와 있는것 같구요...
기본적인 윈속의 개념을 이용해서 하려니까, 한계점에 다다릅니다.

저는 하나의 자식 프로세스가 계속 while을 하면서 read하는 형태로 코드를 짜 나갔습니다.

하나의 클라이언트에서 들어온 메시지(채팅글이되겠습니다.) 를 전체의 접속 클라이언트에게 동시에 보내려고 합니다.
해결 방법을 좀 구체적으로 적어 주세요 ^^
잘 부탁드립니다.


전에 메시지큐로 했던 기억이나네요. 메시지큐를 보시면 아마도 해결책이
나올겁니다. 그리고 배틀넷 같은 채팅서버는 프로세스당 하나의 클라이언트
보다는 하나의 프로세스가 전체 유저를 관리하는것이 더 효율적이구요.
yielding의 이미지

socket, shared memory, pipe, message queue등을 사용해서
가능합니다.

하지만 대용량 네트웍 서버를 만들려면 fork로 프로세스를 만드는거는
엄청 한계가 있습니다. (system resource, context switching time 등)
thread pooling 하시죠. 이 계시판에 관련된 질문과 답이 많이 있던거 같던데요.

Life rushes on, we are distracted

댓글 달기

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