C#에서 네트워크통신이 되는 게임을 만들고 있는데, 통신에 관련해서 질문입니다.

jun_1637의 이미지

숫자퍼즐 게임을 윈도우폼으로 만들었고,

해당 숫자 퍼즐을 즐기면서 서버와 클라이언트간에 통신이 가능한 그런 프로그램을 C#을 공부하면서 만들고 있습니다.

근데 이런 숫자퍼즐을 즐기면서 통신까지 하기 위해선 개발을 비동기소켓프로그래밍으로 만들어야 할까요?

mirheekl의 이미지

스레드를 하나만 써야 된다는 조건이 있다면 모를까, 그렇지 않을 경우 별도의 스레드에서 동기식 통신을 한다 해도 문제될 것이 없습니다.

--

emptynote의 이미지

c# 모르지만 이런 답변은 특정 언어에 종속된 문제가 아니기에 답변드립니다.

예 비동기로 만드셔야 합니다.

관리자가 급히 서버 공지를 띄운다고 생각해 보세요.

비동기가 아니면 클라이언트는 긴급 공지를 어떻게 받아서 처리를 할 수 있겠습니까?

동기 소켓은 무조건 동기 방식으로 메시지 교환을 해야 하지만,

비동기 소켓은 (1) 비동기 방식으로 메시지 교환과 (2) 동기 방식으로 메시지 교환 2가지가 가능합니다.

물론 이에 대한 소프트웨어 설계를 잘 하셔야 하지요.

제가 최근에 비동기 방식으로 파일 송수신을 구현해 보았는데요,

비동기는 입력과 출력 메시지가 독립적이다 보니 신경을 써야 하는 곳이 많고 제어가 참 어렵네요.

그럼 수고하세요.

mirheekl의 이미지

동기식이든 비동기식이든 어차피 어디선가 누군가는 상황을 주시하고 있다가 본체에 알려주어야 합니다. 그게 어디에 존재하느냐의 차이일 뿐이죠.

--

emptynote의 이미지

안될거 없지만 네트워크 초짜들한테 유연성,확장성등등을 고려하여

가장 먼저 비동기를 유도하셔야 하는거 아닐까요?

비동기는 서버/클라이언트 2곳에서 코드 재 사용하기에 무난하다고 생각합니다.

말씀하신 "동기 통신 전담 쓰레드" 는 서버쪽에서는 조금 무리가 아닌가 합니다.

그리고 제가 "동기 통신 전담 쓰레드" 를 구현한적이 없어 통밥으로 이렇게 만들어야겠다 라는 생각이 나서 드리는 질문인데요.

"동기 통신 전담 쓰레드" 는 일정 주기로 서버 메시지 있는지 확인 하는 방식으로 동작한다고 추정합니다.

제 생각이 맞다면 이런 방식은 CPU 등 자원 점유 측면에서 비동기 보다 낮다고 하기에는 거시기 하지 않나요?

mirheekl의 이미지

1. 되는지 안되는지를 명확하게 알리려는 것이 제가 의도한 바입니다.
둘 다 존재한다는 얘기는 결국 양쪽 다 존재가치가 있다는 것이고 어떤 것을 선택할지는 상황에 따른 개인의 판단인 것입니다.
또한 본문에 의하면 현재 글쓰신 분은 클라이언트를 작업하고 있으며, 서버가 C#으로 되어있는지는 알 수 없습니다.

2. 동기 통신 전담 스레드는 폴링을 의미하는 것이 아닙니다. 물론 폴링으로 구현할 수도 있지만, 이 역시 구현하기 나름입니다.
(윗 답변을 보니 동기통신을 폴링과 혼동하신 게 아닐까 하는 생각이 드네요. 동기 비동기와 메시지 응답성은 관계가 없습니다. 폴링과 이벤트 방식이라면 모를까.)
서버라고 비동기 통신을 무조건 쓰면 안 되고 이런 것은 없습니다. 각자 나름대로의 특성이 있으니까 둘 다 존재하는 것이지요.

제가 의도하지 않은 사항에 대해 일일이 답변해야 할 이유는 없으니 이쯤에서 접도록 하겠습니다.

--

댓글 달기

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