udp통신에 대한 문의

darkman76의 이미지

udp통신에 대해서 문의드립니다.
제가 1초당 정보를 송/수신 하고 있으며 패킷 사이즈는 15byte 됩니다.
클라이언트 갯수는 1000개 정도 됩니다.
근데 1초당 정보이면 1,2,3,4,5,6,7,8,9,10 이렇게 데이터가 나와야 하는데 1,3,4,8,10 이렇게 불규칙적으로 나오더군요
그래서 보내는쪽 패킷과 받는쪽 패킷을 봤더니 보내는 쪽은 정확히 보내는데 받는쪽에서 중간중간 15byte의 한 패킷이 싹 다 손실이 되서
받지 못하더군요 이런 경험 해보신분 있으신지요?
100개 정도의 크라이언트는 이 증상이 적은데 갯수가 많아 질수록 심해집니다.
그렇다면 하나의 udp 쓰레드와 포트로 통신하던거를 한 10개로 하면 더 좋아질지 아니면 아예 속도를 포기하고 tcp/ip로 가야 할지 답답하네요

tcp/ip로 쓰레드를 천개를 만든다는것이 불가능한게 이미 하나의 프로세스에서 현장 장비에 tcp/ip로 1000개를 만들어서 tcp/ip로 통신하고 있고
수집된 정보를 내부 서버끼리 udp통신을 하고 있는 중입니다.

경험 많으신 분들 답변좀 부탁드립니다.

pynoos의 이미지

클라이언트가 1000개면 초당 1000개정도의 패킷을 수신하는거죠? 하나를 처리하는데 들어가는 동안 나머지 패킷들이 쌓이게 되고, 그 쌓인 패킷이 버퍼에 가득차게 되면 그 다음 패킷부터는 유실됩니다.

이 정도로 처리를 해주셔야할 것 같네요. 목표는 처리 속도를 지연시킬만한 것을 모두 제거하고, 버퍼에 쌓이는 양을 최소화하는 것 입니다.

1. 처리를 지연시킬만한 것을 제거하기 위해 수신하는 쓰레드에서 불필요한 I/O를 최대한 줄입니다. 수신 쓰레드와 처리하는 쓰레드를 분리하는 것도 좋은 방법입니다.
(파일 로그를 남긴다든지, 다른 소켓에 전달한다든지, 동기화 객체를 기다린다든지..)
2. 버퍼에서 하나만 읽지 말고 읽을 수 있는 한 모두 읽습니다. 읽기가 다 끝나면 처리하지 말고 일단 다 읽어 들입니다.
(get_sockopt이 SO_NREAD를 이용해서 남은게 있는지 확인하는 방법등을 이용해서...)
3. 수신 버퍼의 크기를 키웁니다. set_sockopt, SO_RCVBUF를 이용하면됩니다.

행운을...

댓글 달기

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