Sebagian besar pertanyaan ada di judul.
Pada dasarnya, saya mulai mengembangkan game aksi multipemain 2D. Klien (mungkin) akan berada di XNA, dan saya pikir saya akan bertanya di sini tentang apakah itu ide yang baik untuk menggunakan C # untuk pengembangan sisi server juga.
Saya kira fakta bahwa bahasa tersebut dikelola bukanlah sesuatu yang bermasalah karena Java bahkan digunakan di server game MMO (koreksi saya jika saya salah), jadi apakah ada alasan untuk menghindari C # untuk tujuan ini? Saya membutuhkannya untuk cepat dan responsif, untuk berkomunikasi melalui TCP, untuk mengobrol dengan server SQL. Dan jika tidak ada alasan untuk menghindari C #, bagaimana saya menyebarkan server web seperti itu, apakah itu akan menjadi .NET EXE yang berjalan di mesin server?
Jawaban:
Tidak hanya layak, tetapi benar-benar bagus, dalam pengalaman saya. Saya telah mengembangkan beberapa server MMO menggunakan C #, dan saya harus mengatakan saya tidak pernah menyesali pilihan bahasa dan platform.
Ada banyak perpustakaan besar dan alat untuk C # dan. NET secara umum - jaringan, logging, pemetaan O / R, dll. Dan, dibandingkan dengan Java C # lebih ekspresif dan kurang bertele-tele (beberapa orang mungkin berdebat tentang ini, meskipun .. )
"Overhead" GC yang membuat takut beberapa orang sebenarnya bukan masalah, kecuali jika Anda menyalahgunakannya dengan miliaran alokasi per detik. Sebagai contoh, server kami saat ini mengalokasikan hingga 50 mb / detik di bawah beban berat, dan GC tidak memperkenalkan kelambatan yang terlihat. Kami memang harus menggunakan pengumpulan objek di tempat-tempat strategis, namun - yang paling penting, objek yang mewakili paket jaringan dikumpulkan dan tidak dikumpulkan oleh sampah. Namun, bahkan dengan pooling dimatikan, GC bukan masalah terbesar.
Sebagai contoh betapa kerennya C #, inilah yang baru-baru ini kami terapkan. Server kami menjalankan beberapa layanan WCF, yang digunakan klien game untuk tugas-tugas non-waktu-kritis, dan kami juga menggunakannya untuk administrasi server. Ternyata, sangat mudah untuk membuat layanan WCF untuk hanya mengembalikan objek permainan kami ke pemanggil. Jadi kami melakukan hal itu, lalu membuat plugin kecil untuk LINQPad yang terhubung ke server kami - dan sekarang kita dapat menjalankan kueri seperti
Di server langsung, tidak kurang! Saya tidak berpikir Anda bisa melakukan ini dengan platform lain. Setidaknya tidak dalam pekerjaan beberapa hari.
sumber
Tentu, Anda bisa menggunakan C #.
Salah satu masalah yang lebih besar untuk diperhatikan dalam hal kinerja dalam C # atau ekosistem .NET lainnya adalah GC - kerangka .NET memberikan beberapa rasa GC , termasuk "server" GC, yang patut dipelajari. Mengelola memori secara cerdas (misalnya, dengan menyatukan) masih merupakan teknik yang baik bahkan dalam lingkungan yang dikelola.
Ada beberapa API yang kuat untuk berinteraksi dengan SQL, berkomunikasi melalui TCP, dan lain-lain di C #, baik sebagai bagian dari kerangka dasar atau melalui pihak ketiga, jadi Anda seharusnya tidak mengalami kesulitan di sana.
Anda dapat menggunakan ASP.NET atau serupa jika Anda benar-benar ingin server Anda berbasis web; jika Anda hanya ingin menjalankan suatu proses dan mendengarkan koneksi TCP Anda bisa menggunakan .exe dan dependensi yang sesuai ke mesin server, buka port yang sesuai, dan jalankan .exe.
sumber
Saya pikir ini adalah ide yang hebat. Bahasa ini tentu mampu, dan terutama jika itu yang Anda tahu, jangan menghabiskan banyak waktu untuk belajar bahasa baru hanya karena "lebih cepat". Hambatan nyata server Anda adalah latensi jaringan; satu atau dua milidetik tambahan karena Anda menggunakan C # bukannya C ++ tidak akan membuat perbedaan.
sumber
Jika Anda boleh menggunakan Windows, saya sangat merekomendasikannya, terutama karena klien Anda adalah C #.
Jangan meremehkan pengembangan server game. Bahkan membuat server konkuren khusus obrolan sederhana bukanlah tugas sepele, dan Anda akan segera memiliki banyak pertanyaan tentang konkurensi, penguncian, kinerja, dll.
Sama seperti titik awal, saya ingin Anda melihat halaman ini yang secara luas menjelaskan bagaimana melakukan pemrograman socket bersamaan di beberapa platform:
http://geekswithblogs.net/quension/archive/2006/06/30/83760.aspx
Jika Anda benar-benar serius tentang hal itu, saya sarankan Anda mempelajari Pemrograman Jaringan Unix Stevens secara menyeluruh. Ini berfokus pada soket C di Unix, tetapi prinsipnya sama untuk setiap platform lainnya, termasuk .net.
Sunting: Ini adalah sumber yang bagus, berfokus pada skalabilitas dan kinerja untuk server bersamaan di .net. Tidak lagi tersedia, tetapi teman-teman kami di mesin wayback memiliki salinannya.
http://replay.waybackmachine.org/20080405220143/http://www.coversant.net/dotnetnuke/Coversant/Blogs/tabid/88/EntryID/10/Default.aspx
sumber
Satu 'kerugian' adalah bahwa dengan C # jika Anda ingin menggunakannya pada banyak platform, Anda harus sangat berhati-hati untuk memastikan bahwa kode Anda akan bekerja dengan mono. Jika yang Anda pedulikan adalah menjalankannya pada satu platform dan windows adalah platform itu, maka Anda seharusnya tidak memiliki masalah seperti yang disebutkan orang lain.
sumber