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통신을 하고 있는 중입니다.

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

imays의 이미지

반드시 정확히 도착해야 하는 것이라면, TCP를 쓰시는 것을 권합니다.
그리고 TCP 소켓을 스레드 수만큼 만들 필요가 없습니다. IOCP나 epoll등을 쓰면 한개나 몇개의 스레드만으로 많은 수의 TCP 소켓을 처리할 수 있습니다.

요즘 서버 컴퓨터 수준에서는 1초에 15바이트를 주는 정도면 서버 한대에서 10만개 이상의 커넥션도 충분히 소화합니다.

----------

게임 서버 엔진 개발자입니다.

https://blog.naver.com/imays

라스코니의 이미지

tcp/ip 로 1000개를 만들 필요가 없습니다.
윗분처럼 몇개 쓰레드로 1000 개를 처리하도록 하시면 될 것이라고 보이고 몇개의 쓰레드로 할지는 구글링을 해보시기 바랍니다.
쓰레드가 많아지면 쓰레드간 컨텍스트 스위칭 시간때문에 오히려 속도 면에서 불리합니다.

15 byte X 1000 개 해봐야 15 kbyte 인데 정말 아무것도 아닌 데이터 양입니다.
UDP의 경우 소켓이나 연결 상황에 따라서 사라질 수 있기는 한데 15 byte 라면 그렇지도 않을 것 같고요.

다음 클라이언트에 보내기 전에 한 10 usec 정도 딜레이를 줘 보세요.

threadA()
{
while (i, 1: 100) {
sendto (i);
delay (10us);
i++;
}
}

댓글 달기

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