ความนิยมของเครือข่ายทำให้โปรแกรมเซิร์ฟเวอร์ใช้กันอย่างแพร่หลายดังนั้นเราจะออกแบบเซิร์ฟเวอร์ที่แข็งแกร่งโดยใช้ Delphi ได้อย่างไร
บางคนบอกว่าถ้าคุณต้องการออกแบบเซิร์ฟเวอร์คุณต้องใช้ VC เพื่อออกแบบ อย่าใช้ตัวใหญ่ที่นำโดย Delphi ฉันจะบอกคุณด้านล่าง ด้วยวิธีนี้คุณใช้ APIs ในการออกแบบเซิร์ฟเวอร์ซึ่งไม่แตกต่างจาก VCS มากนัก
ใช้ Delphi เพื่อออกแบบโปรแกรมเซิร์ฟเวอร์ หากการเชื่อมต่อผู้ใช้ของคุณน้อยกว่า 1,000 และปริมาณการประมวลผลข้อมูลไม่ใหญ่คุณสามารถใช้โหมดข้อความของแบบฟอร์มเพื่อพัฒนาเซิร์ฟเวอร์ เซิร์ฟเวอร์. ฉันขอแนะนำว่าทุกคนดีที่สุดที่จะใช้โหมดพอร์ตที่สมบูรณ์เพราะคุณไม่สามารถมั่นใจได้ว่าจำนวนผู้ใช้จะไม่เปลี่ยนแปลงในเวลาเดียวกันหากเซิร์ฟเวอร์ของคุณทำงานเป็นระยะเวลาหนึ่ง ซึ่งสามารถมั่นใจได้ว่าการบำรุงรักษาน้อยลงในภายหลัง
ตอนนี้แนะนำสิ่งที่คุณต้องให้ความสนใจเมื่อพัฒนาเซิร์ฟเวอร์ Delphi:
1 อย่าใช้ตัวแปรสตริงในโปรแกรมของคุณ
สิ่งนี้ถูกค้นพบในระหว่างกระบวนการพัฒนาจริง เหตุผลหลังจากตรวจสอบ
2 ใช้อัลกอริทึมการเข้ารหัสที่รวดเร็วเช่นการเข้ารหัส XOR หรือการเข้ารหัส DES
เซิร์ฟเวอร์จะต้องเข้ารหัสเมื่อส่งผ่านไปยังไคลเอนต์ แต่ควรใช้อัลกอริทึมการเข้ารหัสประเภทใด อย่าใช้อัลกอริทึมที่ต้องใช้การดำเนินงานจำนวนมากเช่น RSA และอัลกอริทึมอื่น ๆ . นอกจากนี้คุณยังสามารถใช้ RSA เพื่อเข้ารหัส ciphertexts แต่สิ่งนี้จะทำให้เซิร์ฟเวอร์ดำเนินการอย่างช้าๆและหากคุณพบการประมวลผลจำนวนมากมันเป็นเรื่องง่ายสำหรับเซิร์ฟเวอร์ที่จะปฏิเสธเซิร์ฟเวอร์
3 ใช้ฟังก์ชั่น ADO ดั้งเดิมเพื่อเชื่อมต่อกับฐานข้อมูล
โปรแกรมเซิร์ฟเวอร์มักจะรวมกับฐานข้อมูล สามารถทำได้โดยตรงโดยใช้ฟังก์ชั่น ADO ที่สอดคล้องกัน ส่วนใหญ่เป็นเพราะโปรแกรมเซิร์ฟเวอร์และฐานข้อมูลมักจะใช้งานได้ค่อนข้างง่ายและไม่ซับซ้อนมาก ดังนั้นเพียงใช้โหมด ADO ดั้งเดิม นอกจากนี้ยังช่วยลดปัญหาที่เกิดจากการควบคุม ADO
4. ใช้“ พูล” เพิ่มเติม
ในระหว่างกระบวนการออกแบบของเซิร์ฟเวอร์คุณต้องสนับสนุนตัวแปรจำนวนมาก และมีแนวโน้มที่จะเกิดปัญหา พยายามอย่าสร้างและปล่อยตัวแปรในระหว่างกระบวนการออกแบบ สิ่งนี้สามารถเพิ่มความเร็วความเร็วในการทำงานของโปรแกรมและลดความขัดแย้ง วิธีใช้เทคโนโลยีสระว่ายน้ำฉันจะพิจารณาเขียนบทนำถ้าฉันมีเวลาในอนาคต
5 มีความเชี่ยวชาญในการใช้พอยน์เตอร์
หากคุณไม่คุ้นเคยกับการทำงานของตัวชี้คุณแทบจะไม่สามารถออกแบบเซิร์ฟเวอร์ที่มีประสิทธิภาพได้
นี่คือตัวอย่าง
วาจา
A, B: Array [1..8] ของ Byte;
ฉัน: จำนวนเต็ม;
ResultBuffer: Array [1..MAX] ของ BYTE;
เริ่ม
สำหรับ i: = 1 ถึง sizeof (บัฟเฟอร์) div 8 ทำ
เริ่ม
ย้าย (บัฟเฟอร์ [(I-1)*8+1], a, 8);
DES (A, B, TRUE);
ย้าย (b, resultbuffer [(i-1)*8+1], 8);
จบ;
จบ
มาดูรหัสด้านบนและความคิดนั้นชัดเจนมากซึ่งก็คือการใช้อัลกอริทึมการถอดรหัส DES เพื่อถอดรหัสลงใน B จากนั้นนำกลับเข้าไปใน ResultBuffer
หากคุณมีความเชี่ยวชาญในพอยน์เตอร์ประสิทธิภาพของคุณจะดีขึ้นอย่างมาก
วาจา
A, B: PBYTE;
ฉัน: จำนวนเต็ม;
ResultBuffer: Array [1..MAX] ของ BYTE;
เริ่ม
สำหรับ i: = 1 ถึง sizeof (บัฟเฟอร์) div 8 ทำ
เริ่ม
A: = @Buffer [(I-1)*8+1];
B: = @ResultBuffer [(I-1)*8+1]
DES (a^, b^, true);
จบ;
จบ
มาดูรหัสข้างต้น
6 ใช้ WSASEND, WSARECV และฟังก์ชั่น WinSocket 2 อื่น ๆ บ่อยขึ้นไม่ใช้ฟังก์ชัน SEND, RECV
ส่วนใหญ่ขึ้นอยู่กับระบบเซิร์ฟเวอร์ของคุณกำลังทำงานอยู่
7. ใช้การดำเนินการพูลเธรดอย่างมีเหตุผล
เซิร์ฟเวอร์ที่มีประสิทธิภาพจะต้องใช้เทคโนโลยีการรวมเธรด โดยส่วนตัวแล้วฉันคิดว่าหากคุณต้องการใช้เทคโนโลยีการรวมเธรดคุณต้องจัดการกับการดำเนินการที่ใช้เวลานานที่สุดเช่นการดำเนินการสืบค้นฐานข้อมูล
8 หากเซิร์ฟเวอร์ใช้แนวคิดของ "พูล" มีปัญหาอีกอย่างหนึ่ง
ฉันใช้พูลในหลายวิธีเช่นพูลเธรดพูลข้อมูล ฯลฯ เมื่อมาถึงข้อมูลจะจัดสรรพูลได้อย่างไร? ฉันจะไม่บอกคุณที่นี่และฉันจะเขียนบทความพิเศษเกี่ยวกับกลุ่มในอนาคต คำอธิบายโดยละเอียดเกี่ยวกับวิธีการใช้พูล คุณยังสามารถคิดถึงมันด้วยตัวเอง
9 การใช้ฟังก์ชั่นการจัดการสตริงที่มีประสิทธิภาพ
เนื่องจากเซิร์ฟเวอร์ต้องเรียกใช้สตริงจำนวนมากจึงต้องใช้เวลานานหากคุณใช้ฟังก์ชั่นที่จัดทำโดย Delphi เพื่อใช้งาน เป็นประโยชน์กับคุณ
10 เพิ่มประสิทธิภาพคำสั่ง SQL แบบสอบถามของคุณ
ในอีกด้านหนึ่งคุณสามารถเพิ่มประสิทธิภาพคำสั่ง SQL แบบสอบถามเพื่อปรับปรุงประสิทธิภาพการปฏิบัติงานและในทางกลับกันคุณยังสามารถใช้ขั้นตอนที่เก็บไว้เพื่อปรับปรุงประสิทธิภาพการปฏิบัติงาน (คุณต้องดูเนื้อหาของฐานข้อมูลสำหรับความรู้นี้และฉันจะไม่พูดถึงวิธีการเพิ่มประสิทธิภาพที่นี่)
การแนะนำข้างต้นเป็นประสบการณ์ที่ใช้งานได้จริงของฉันและมันอาจจะไม่เป็นไร หากมีวิธีการที่ดีกว่าก็สามารถพูดคุยกันได้เช่นกัน