{"id":12369,"date":"2022-09-30T14:13:36","date_gmt":"2022-09-30T08:43:36","guid":{"rendered":"https:\/\/jassweb.com\/solved\/solved-c-asynchronous-server-sockets-thread-safety-performance-mmo-gaming-closed\/"},"modified":"2022-09-30T14:13:36","modified_gmt":"2022-09-30T08:43:36","slug":"solved-c-asynchronous-server-sockets-thread-safety-performance-mmo-gaming-closed","status":"publish","type":"post","link":"https:\/\/jassweb.com\/solved\/solved-c-asynchronous-server-sockets-thread-safety-performance-mmo-gaming-closed\/","title":{"rendered":"[Solved] C# Asynchronous Server Sockets &#8211; Thread-Safety\/Performance (MMO Gaming) [closed]"},"content":{"rendered":"<p> [ad_1]<br \/>\n<\/p>\n<div id=\"answer-17387021\" class=\"answer js-answer accepted-answer js-accepted-answer\" data-answerid=\"17387021\" data-parentid=\"17386897\" data-score=\"3\" data-position-on-page=\"1\" data-highest-scored=\"1\" data-question-has-accepted-highest-score=\"1\" itemprop=\"acceptedAnswer\" itemscope itemtype=\"https:\/\/schema.org\/Answer\">\n<div class=\"post-layout\">\n<div class=\"votecell post-layout--left\"><\/div>\n<div class=\"answercell post-layout--right\">\n<div class=\"s-prose js-post-body\" itemprop=\"text\">\n<p>The first thing I want to mention, since I believe it is answers the root of your question, is that your performance (latency, concurrent connection capacity, etc) is going to be largely defined by the hardware you are running this software on and the network performance for each specific client. Software can improve some things but generally speaking, if your code is well written and understandable by others and contains no bugs, it will perform just fine.<\/p>\n<p>Will your code handle 300 connections concurrently? Yes most likely it can. I do see some potential issues with threading though. One being that you will have a lot of contention when you accept new clients. You also created a vulnerability by waiting between accepts for each client to be fully accepted, a potential for a denial of service attack. A client can stall the connection by requiring re-transmissions of data for each packet up to three times per packet and can wait to deliver each message up to whenever your timeout is (10 seconds?). There will also be a lot of problems with data processing unless the method stubs you have are thread safe themselves once you implement them.<\/p>\n<p>You are using the older asynchronous socket model. It&#8217;s a little complicated for what it is. I think that you will understand the event driven model a little better since it is more natural in my opinion. I know that from my experience, either perform just fine. However, I have also found that the new event driven model is a bit faster since you do not  have huge garbage collections being done due to over allocation of <code>IAsyncResult<\/code> objects. The newer model uses methods such as <code>Socket.AcceptAsync<\/code> and the <code>Socket.Completed<\/code> event.<\/p>\n<p>Since you are new to C#, I would recommend that instead you should be focusing efforts on writing a simple and clean client\/server application that has asynchronous elements. You can do a load test on that and see if it satisfies your criteria for performance in terms of the raw throughput on your hardware. This will reduce the factors in your analysis. I recommend starting with something that can communicate simple text messages back and forth. You can increase the complexity as you gain a deeper understanding of the nuances of threading and network communication in .NET.<\/p>\n<p>One website I recommend you looking into is <a rel=\"nofollow noopener\" target=\"_blank\" href=\"http:\/\/www.albahari.com\/threading\/\">http:\/\/www.albahari.com\/threading\/<\/a>, this has a good explanation of the various building blocks for writing multi-threaded code. It&#8217;s aimed at people with programming experience, as you mentioned you have. The &#8220;advanced threading&#8221; section is what I reference often.<\/p>\n<p>The book &#8220;Pro C# 2010 and the .NET 4 Platform&#8221; by Andrew Troelson (ISBN 1430225491) would be a good start as well. It covers a lot of the language and shows some parallels between C# and other languages. It also covers a lot of .NET which is what most people really need to get a good understanding of before diving into the fun stuff.<\/p>\n<\/p><\/div>\n<div class=\"mt24\"><\/div>\n<\/div>\n<p>            <span class=\"d-none\" itemprop=\"commentCount\">7<\/span> <\/p><\/div>\n<\/div>\n<p>[ad_2]<\/p>\n<p>solved C# Asynchronous Server Sockets &#8211; Thread-Safety\/Performance (MMO Gaming) [closed] <\/p>\n","protected":false},"excerpt":{"rendered":"<p>[ad_1] The first thing I want to mention, since I believe it is answers the root of your question, is that your performance (latency, concurrent connection capacity, etc) is going to be largely defined by the hardware you are running this software on and the network performance for each specific client. Software can improve some &#8230; <a title=\"[Solved] C# Asynchronous Server Sockets &#8211; Thread-Safety\/Performance (MMO Gaming) [closed]\" class=\"read-more\" href=\"https:\/\/jassweb.com\/solved\/solved-c-asynchronous-server-sockets-thread-safety-performance-mmo-gaming-closed\/\" aria-label=\"More on [Solved] C# Asynchronous Server Sockets &#8211; Thread-Safety\/Performance (MMO Gaming) [closed]\">Read more<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[320],"tags":[352,335,3376,324,884],"class_list":["post-12369","post","type-post","status-publish","format-standard","hentry","category-solved","tag-net","tag-asynchronous","tag-asyncsocket","tag-c","tag-multithreading"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>[Solved] C# Asynchronous Server Sockets - Thread-Safety\/Performance (MMO Gaming) [closed] - JassWeb<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/jassweb.com\/solved\/solved-c-asynchronous-server-sockets-thread-safety-performance-mmo-gaming-closed\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"[Solved] C# Asynchronous Server Sockets - Thread-Safety\/Performance (MMO Gaming) [closed] - JassWeb\" \/>\n<meta property=\"og:description\" content=\"[ad_1] The first thing I want to mention, since I believe it is answers the root of your question, is that your performance (latency, concurrent connection capacity, etc) is going to be largely defined by the hardware you are running this software on and the network performance for each specific client. Software can improve some ... Read more\" \/>\n<meta property=\"og:url\" content=\"https:\/\/jassweb.com\/solved\/solved-c-asynchronous-server-sockets-thread-safety-performance-mmo-gaming-closed\/\" \/>\n<meta property=\"og:site_name\" content=\"JassWeb\" \/>\n<meta property=\"article:published_time\" content=\"2022-09-30T08:43:36+00:00\" \/>\n<meta name=\"author\" content=\"Kirat\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Kirat\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/jassweb.com\/solved\/solved-c-asynchronous-server-sockets-thread-safety-performance-mmo-gaming-closed\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/jassweb.com\/solved\/solved-c-asynchronous-server-sockets-thread-safety-performance-mmo-gaming-closed\/\"},\"author\":{\"name\":\"Kirat\",\"@id\":\"https:\/\/jassweb.com\/solved\/#\/schema\/person\/65c9c7b7958150c0dc8371fa35dd7c31\"},\"headline\":\"[Solved] C# Asynchronous Server Sockets &#8211; Thread-Safety\/Performance (MMO Gaming) [closed]\",\"datePublished\":\"2022-09-30T08:43:36+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/jassweb.com\/solved\/solved-c-asynchronous-server-sockets-thread-safety-performance-mmo-gaming-closed\/\"},\"wordCount\":516,\"publisher\":{\"@id\":\"https:\/\/jassweb.com\/solved\/#organization\"},\"keywords\":[\".net\",\"asynchronous\",\"asyncsocket\",\"c++\",\"multithreading\"],\"articleSection\":[\"Solved\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/jassweb.com\/solved\/solved-c-asynchronous-server-sockets-thread-safety-performance-mmo-gaming-closed\/\",\"url\":\"https:\/\/jassweb.com\/solved\/solved-c-asynchronous-server-sockets-thread-safety-performance-mmo-gaming-closed\/\",\"name\":\"[Solved] C# Asynchronous Server Sockets - Thread-Safety\/Performance (MMO Gaming) [closed] - JassWeb\",\"isPartOf\":{\"@id\":\"https:\/\/jassweb.com\/solved\/#website\"},\"datePublished\":\"2022-09-30T08:43:36+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/jassweb.com\/solved\/solved-c-asynchronous-server-sockets-thread-safety-performance-mmo-gaming-closed\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/jassweb.com\/solved\/solved-c-asynchronous-server-sockets-thread-safety-performance-mmo-gaming-closed\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/jassweb.com\/solved\/solved-c-asynchronous-server-sockets-thread-safety-performance-mmo-gaming-closed\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/jassweb.com\/solved\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"[Solved] C# Asynchronous Server Sockets &#8211; Thread-Safety\/Performance (MMO Gaming) [closed]\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/jassweb.com\/solved\/#website\",\"url\":\"https:\/\/jassweb.com\/solved\/\",\"name\":\"JassWeb\",\"description\":\"Build High-quality Websites\",\"publisher\":{\"@id\":\"https:\/\/jassweb.com\/solved\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/jassweb.com\/solved\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/jassweb.com\/solved\/#organization\",\"name\":\"Jass Web\",\"url\":\"https:\/\/jassweb.com\/solved\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/jassweb.com\/solved\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/jassweb.com\/wp-content\/uploads\/2021\/02\/jass-website-logo-1.png\",\"contentUrl\":\"https:\/\/jassweb.com\/wp-content\/uploads\/2021\/02\/jass-website-logo-1.png\",\"width\":693,\"height\":132,\"caption\":\"Jass Web\"},\"image\":{\"@id\":\"https:\/\/jassweb.com\/solved\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/jassweb.com\/solved\/#\/schema\/person\/65c9c7b7958150c0dc8371fa35dd7c31\",\"name\":\"Kirat\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/jassweb.com\/solved\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/jassweb.com\/solved\/wp-content\/litespeed\/avatar\/1261af3c9451399fa1336d28b98ea3bb.jpg?ver=1775798750\",\"contentUrl\":\"https:\/\/jassweb.com\/solved\/wp-content\/litespeed\/avatar\/1261af3c9451399fa1336d28b98ea3bb.jpg?ver=1775798750\",\"caption\":\"Kirat\"},\"sameAs\":[\"http:\/\/jassweb.com\"],\"url\":\"https:\/\/jassweb.com\/solved\/author\/jaspritsinghghumangmail-com\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"[Solved] C# Asynchronous Server Sockets - Thread-Safety\/Performance (MMO Gaming) [closed] - JassWeb","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/jassweb.com\/solved\/solved-c-asynchronous-server-sockets-thread-safety-performance-mmo-gaming-closed\/","og_locale":"en_US","og_type":"article","og_title":"[Solved] C# Asynchronous Server Sockets - Thread-Safety\/Performance (MMO Gaming) [closed] - JassWeb","og_description":"[ad_1] The first thing I want to mention, since I believe it is answers the root of your question, is that your performance (latency, concurrent connection capacity, etc) is going to be largely defined by the hardware you are running this software on and the network performance for each specific client. Software can improve some ... Read more","og_url":"https:\/\/jassweb.com\/solved\/solved-c-asynchronous-server-sockets-thread-safety-performance-mmo-gaming-closed\/","og_site_name":"JassWeb","article_published_time":"2022-09-30T08:43:36+00:00","author":"Kirat","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Kirat","Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/jassweb.com\/solved\/solved-c-asynchronous-server-sockets-thread-safety-performance-mmo-gaming-closed\/#article","isPartOf":{"@id":"https:\/\/jassweb.com\/solved\/solved-c-asynchronous-server-sockets-thread-safety-performance-mmo-gaming-closed\/"},"author":{"name":"Kirat","@id":"https:\/\/jassweb.com\/solved\/#\/schema\/person\/65c9c7b7958150c0dc8371fa35dd7c31"},"headline":"[Solved] C# Asynchronous Server Sockets &#8211; Thread-Safety\/Performance (MMO Gaming) [closed]","datePublished":"2022-09-30T08:43:36+00:00","mainEntityOfPage":{"@id":"https:\/\/jassweb.com\/solved\/solved-c-asynchronous-server-sockets-thread-safety-performance-mmo-gaming-closed\/"},"wordCount":516,"publisher":{"@id":"https:\/\/jassweb.com\/solved\/#organization"},"keywords":[".net","asynchronous","asyncsocket","c++","multithreading"],"articleSection":["Solved"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/jassweb.com\/solved\/solved-c-asynchronous-server-sockets-thread-safety-performance-mmo-gaming-closed\/","url":"https:\/\/jassweb.com\/solved\/solved-c-asynchronous-server-sockets-thread-safety-performance-mmo-gaming-closed\/","name":"[Solved] C# Asynchronous Server Sockets - Thread-Safety\/Performance (MMO Gaming) [closed] - JassWeb","isPartOf":{"@id":"https:\/\/jassweb.com\/solved\/#website"},"datePublished":"2022-09-30T08:43:36+00:00","breadcrumb":{"@id":"https:\/\/jassweb.com\/solved\/solved-c-asynchronous-server-sockets-thread-safety-performance-mmo-gaming-closed\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/jassweb.com\/solved\/solved-c-asynchronous-server-sockets-thread-safety-performance-mmo-gaming-closed\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/jassweb.com\/solved\/solved-c-asynchronous-server-sockets-thread-safety-performance-mmo-gaming-closed\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/jassweb.com\/solved\/"},{"@type":"ListItem","position":2,"name":"[Solved] C# Asynchronous Server Sockets &#8211; Thread-Safety\/Performance (MMO Gaming) [closed]"}]},{"@type":"WebSite","@id":"https:\/\/jassweb.com\/solved\/#website","url":"https:\/\/jassweb.com\/solved\/","name":"JassWeb","description":"Build High-quality Websites","publisher":{"@id":"https:\/\/jassweb.com\/solved\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/jassweb.com\/solved\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/jassweb.com\/solved\/#organization","name":"Jass Web","url":"https:\/\/jassweb.com\/solved\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/jassweb.com\/solved\/#\/schema\/logo\/image\/","url":"https:\/\/jassweb.com\/wp-content\/uploads\/2021\/02\/jass-website-logo-1.png","contentUrl":"https:\/\/jassweb.com\/wp-content\/uploads\/2021\/02\/jass-website-logo-1.png","width":693,"height":132,"caption":"Jass Web"},"image":{"@id":"https:\/\/jassweb.com\/solved\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/jassweb.com\/solved\/#\/schema\/person\/65c9c7b7958150c0dc8371fa35dd7c31","name":"Kirat","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/jassweb.com\/solved\/#\/schema\/person\/image\/","url":"https:\/\/jassweb.com\/solved\/wp-content\/litespeed\/avatar\/1261af3c9451399fa1336d28b98ea3bb.jpg?ver=1775798750","contentUrl":"https:\/\/jassweb.com\/solved\/wp-content\/litespeed\/avatar\/1261af3c9451399fa1336d28b98ea3bb.jpg?ver=1775798750","caption":"Kirat"},"sameAs":["http:\/\/jassweb.com"],"url":"https:\/\/jassweb.com\/solved\/author\/jaspritsinghghumangmail-com\/"}]}},"_links":{"self":[{"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/posts\/12369","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/comments?post=12369"}],"version-history":[{"count":0,"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/posts\/12369\/revisions"}],"wp:attachment":[{"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/media?parent=12369"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/categories?post=12369"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/tags?post=12369"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}