V IPC 메시지 큐 다뤄 보신 분 조언 좀 해주세요.

kknd345의 이미지

여러 프로세스가 메시지 큐를 이용해서 대화를 하는 채팅 프로그램을 만들려고 합니다.

어느 정도 메시지큐에 대한 내용을 이해를 하고 알고리즘을 짤려고 하는데 기본적인 생각부터 막히네요.

처음에 msgget을 이용해서 하나의 메시지 큐를 만들잖아요
그 메시지큐는 여러 프로세스에 의해 공유가 되고 있는 상황인데 어떤 한 프로세스가 메시지를 날리기 위해 메시지큐에 내용을 넣으면 다른 한 프로세스가 그 메시지를 가지고 가면 큐에서 그 메시지가 없어지잖아요. 그럼 나머지 프로세스는 대화 내용을 못 보는데 이 부분 어떻게 해결 하나요?

처음에는 프로세스 수 만큼 메시지큐에 적으면 되지 않을까 생각했는데... 그것도 프로세스가 경쟁모드로 가져가면 한 프로세스가 같은 내용을 두번 가져갈수도 있기 때문에 바람직 하지 않은거 같고..

도대체 어떻게 해결해야 할지 모르겠네요 ㅜㅜ...

조언 좀 해주세요~

익명 사용자의 이미지

sharedmemory와 counting semaphore정도면 처리되지 않을까요?

lopad의 이미지

저도 한때 메시지큐를 이용해서 채팅프로그램을 만든 적이 있지요..

결론부터 말하자면 메시지큐를 쓰지 않는 것이 좋습니다.
당시 성능이 만족스럽지 못했습니다. (solaris x86 2.6)

Quote:
sharedmemory와 counting semaphore정도면 처리되지 않을까요?

한표

kooya의 이미지

msgsnd쪽에서 보낼때 msgtype을 지정해주고
msgrcv하는 쪽에서 자기만의 유일한 msgtype 을 받는걸로 지정해볼수 있지 않나요?

greedy 알고리즘

ironboy의 이미지

메시지 큐를 peek해서 볼 수 있습니다.

메시지큐 구조체를 정의할 때,
구조체 멤버 젤 처음에
long 을 선언하게 됩니다. (long mtype;)

요 값은 메시지 큐에서 값을 가져오지 않고도
엿볼수(peek) 있습니다.

자세한 방법은 msgrcv 함수를 검색해 보세요.

처음으로 답변을 달아 보는 거라.... 좀 떨리(?)네요.^^

댓글 달기

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