จากการศึกษาสร้าง เกมส์ ในรูปแบบที่เล่นคนเดียวมาแล้ว ถ้าเราจะทำให้เป็นเกมส์ออนไลน์นั้น ก็ต้อง เรียนรู้เพิ่มอีกหลายเรื่อง ไม่ว่าจะเป็น การใช้ Protocal
การใช้ฐานข้อมูล และ การจัดการประมวลผลแบบ Multiuser การทำให้เป็นเกมส์ออนไลน์ มันยุ่งยากมาก ก่อนอื่นถ้าคุณเคยเขียนเกมส์มาในรูปแบบของ
Client อย่างเดียวนั้น ผมจะบอกว่าคุณสามารถนำมาใช้ได้แค่ 50-60 % เท่านั้น
เพราะส่วนทีเหลือต้องมา พัฒนารวมความรู้เข้ากับ การทำ Client/Server และ Database ผมจะพูดถึง แนวทางการใช้ TCP และ UDP สำหรับเกมส์ออนไลน์
แบบ คร่าวๆ โดยที่ไม่ลงไปถึงเรื่อง source code นะครับ
TCP เป็น Protocal ที่มีการเชื่อมต่อ แบบ เชื่อถือได้ หมายถึง จะมีการยืนยันการเชื่อมต่อ การส่งข้อมูลจะมีหมายเลขข้อมูลกำกับ และส่งตามลำดับเสมอ
ถ้ามีการส่ง Packet ที่ผิดพลาดโดยไม่ถึงผู้รับ จะมีการแจ้งความผิดพลาดกลับไปยัง Server และเป็นการทำงานแบบ 1 ต่อ 1 หมายความว่า
เมื่อมีการเชื่อต่อ แบบ Multiuser Server จะทำการเชื่อต่อกับ Client ทีละคนไปตามลำดับ เมื่อพูดถึงการสร้างเกมส์แบบ MMO ด้วย TCP นั้น สามารถทำได้
แต่ผลกระทบที่ตามมาก็คือ อาการ lag หรือที่เรียกเต็มๆว่า lagging time เพราะเป็นการการทำงานแบบตามลำดับ โดยเวลาที่ใช้นั้นจะต้องนำมาคำนวณตาม User
คูณกับเวลาที่ใช้ในแต่ละคน การจะลดอาการ lag ของ TCP นั้นต้องอาศัยการจัดการโครงสร้างข้อมูลทื่ดี หรือ อาจจะใช้ การแบ่ง Channel ย่อยใน Server
เพื่อให้สามารถส่ง Packet แบบ Group User ได้ หรือ ทำ Multi-thread เพื่อประมวลผล กลุ่มข้อมูลให้สามารถ นำข้อมูลไปใช้ แบบตามลำดับได้ดีที่สุด
ซึ่งการแลกความน่าเชื่อถือของ Protocal แต่ความเร็วจะต้องลดลงไป ก็ต้องตัดสินใจเลือกเอา อีกกรณีที่ต้องคำนึงถึงก็คือ ขนาดของข้อมูล
การส่ง Packet แบบ TCP จะคิดขนาดของข้อมูลรวมที่จะต้องส่ง จากจำนวน User คูณกับขนาดของข้อมูล จุดนี้เป็นสิ่งที่ต้องคำนึงถึงด้วยเพราะจะทำกิน Bandwidth มาก
ถ้าออกแบบไม่ดีอาจจะส่งผลกระทบต่อ Server เป็นอย่างมาก
UDP เป็น Protocal ที่สามารถกระจายข้อมูลแบบ ขนาน Multicast หรือ Broadcasting โดยที่ Multicast จะเป็นการกระจายข้อมูลแบบขนาน
ให้กับกลุ่ม Client ที่มีการลงทะเบียนในกลุ่มเอาไว้ ส่วน Broadcast นั้น จะส่งให้กับทุกๆ Client ที่เชื่อมต่อ โดยให้หลักการ Forward data
การทำงานของ UDP นั้นรวดเร็วและ เหมือนจะดีกว่ามาก แต่ในความเป็นจริงแล้ว UDP ขาดความน่าเชื่อถือของ Protocal เพราะ
จะไม่มีการยืนยันการเชื่อมต่อกับ User ตลอดเวลา ดังนั้น จึงอาจจะทำให้เกิด Lost Packet ,Duplicate Packet,Split Packet ได้
ซึ่งการขาดความน่าเชื่อถือนี้อาจส่งผลกระทบกับข้อมูลที่สำคัญเช่น Username ,Password ซึ่งจากที่ผมหาข้อมูลในอินเตอร์เน็ท ก็พอรู้มาว่า
บางบริษัทเกมส์นั้นมีการแยก Server ให้ใช้ TCP เพื่อ เป็น Login Server และให้ Server Game ใช้ UDP การที่จะใช้ UDP ทำให้เป็น
Login Server นั้น ต้องมีการตรวจสอบข้อมูลเป็นอย่างดี การยืนยันการมีอยู่ของ Client อาจใช้การ Ping User แล้วรอสัญญาณตอบรับจาก User
ก่อน ที่จะส่งข้อมูลไปก็ได้ แต่ ก็จะทำให้เสียเวลาเช่นกัน และเท่าที่ได้รู้มาจากการหาข้อมูลในอินเตอร์เน็ทนั้น ผู้ที่ให้ Server ใช้ UDP นั้น ปัญหาหลักก็คือ
การที่บางครั้งต้องการความชัวร์ในการส่งข้อมูล เช่น แลกเปลี่ยนสิ่งของระหว่างผู้เล่น การส่งข้อมูลสำคัญจาก Server ไปให้กับ User ที่เฉพาะเจาะจง
ซึ่งจะต้องมีการ Ping User อย่างน้อย แต่ก็ไม่ได้หมายความว่ามันจะแน่นอนเสมอไป อาจทำให้การแลกเปลี่ยนเกิดการผิดพลาดได้
และถ้ามองในแง่ของการให้บริการเกมส์นั้น ข้อมูลของผู้เล่นนั้นถือเป็นสิ่งสำคัญ เพราะจะทำให้เกิดความยุ่งยากตามมา
ข้อ ดีของ UDP นั้นมีอีกข้อก็คือ การลด Data Transfer เพราะ การส่งข้อมูลแบบ Multicast หรือ Broadcast นั้น ใช้ Packet เพียง
ชิ้นเดียวขนาดและครั้งเดียวในการส่ง ทำให้ Server UDP ที่ดีนั้นสามารถรองรับ User ได้มากมาย ทั้งสอง Protocal นั้น เป็นที่ถกเถียงกันอย่างมากในวงการเกมส์ออนไลน์
ดั้งนั้นเราก็ควรจะตัดสินใจเลือกตามความถนัดการเขียนโปรแกรมของตัวเอง ดูจะดีที่สุด เพราะ ไม่ว่า Protocal ไหนก็ทำเกมส์ออนไลน์แบบ Massively
ได้ แต่ต้องออกแบบให้ดีก็แค่นั้น ขนาด เกมส์ดังๆอย่าง WOW ยังใช้ TCP เลย ทั้งๆที่หลา่ยต่อหลายคนชอบบอกว่า TCP แทบจะทำ MMO ไม่ได้เลย ดังนั้นถ้ามีใครมาบอกว่า
ใช้ TCP ทำ MMO ไม่ได้ ขอความกรุณา ผู้อ่านที่มีวิจารญาณ คิดให้ดีก่อนตัดสินใจแล้วกัน ขอเพียงอย่างเดียวให้รู้ว่าในการเขียนโปรแกรม ภาษาโปรแกรม
ไม่ตายตัว คุณคิดได้แบบไหนก็เขียนแบบนั้น และพัฒนามันให้ดีที่สุด อย่าไปยึดติดรูปแบบการเขียนของคนอื่น เพราะ มันจะทำให้คุณคิดไม่เป็น และจะไม่เกิดสิ่งใหม่ ; )
