การสื่อสารที่เร็วที่สุดเท่าที่จะเป็นไปได้
นี่คือเวอร์ชัน 7.2 ของแพ็คเกจ NetCom ในเวอร์ชันนี้แพ็คเกจ Netcom ตอนนี้มีหลายแพลตฟอร์ม! คุณสามารถรวบรวมแอพของคุณภายใต้แพลตฟอร์มทั้งหมดใน FireMonkey!
ชุดของส่วนประกอบนี้เป็นการใช้งานที่เร็วที่สุดที่เป็นไปได้ของการสื่อสารซ็อกเก็ตในภาษาใด ๆ นี่คือรหัสที่ได้รับการปรับปรุงอย่างมากบนซ็อกเก็ต TCP/IP ลืมการใช้เธรดต่อการเชื่อมต่อ: ด้วยชุดนี้คุณสามารถเชื่อมต่อกับเซิร์ฟเวอร์ของคุณได้มากเท่าที่คุณต้องการ มีการใช้เธรดต่อคำขอและไม่ต่อการเชื่อมต่อและได้รับการดูแลในคลาสพูลเธรดที่รวดเร็วมาก
การใช้งานเริ่มต้นด้วย TNCTCPSERVER และ TNCTCPClient ซึ่งใช้การสื่อสารซ็อกเก็ตพื้นฐาน คุณสามารถใช้ TNCTCPClient และ TNCTCPSERVER ได้หากสิ่งที่คุณต้องการคือใช้ซ็อกเก็ตมาตรฐาน (แต่เร็วมาก)
ด้านบนของซ็อกเก็ต TCP/IP โปรโตคอลน้ำหนักเบาจะถูกนำไปใช้เพื่อให้สามารถบรรจุและแกะบัฟเฟอร์ (Simple TCP/IP กำลังสตรีมมิ่งและไม่มีความคิดของบัฟเฟอร์ที่กำหนดไว้อย่างดี) ชุดของส่วนประกอบที่ใช้ฟังก์ชั่นนี้คือ TNCServersource และ TNCClientsource ส่วนประกอบทั้งสองนี้ใช้งาน ExecCommand (ACMD, ADATA) ซึ่งก่อให้เกิดเหตุการณ์ OnhandleCommand ในอีกด้านหนึ่ง (ไคลเอนต์สามารถดำเนินการกับเซิร์ฟเวอร์หรือเซิร์ฟเวอร์สามารถจัดการกับไคลเอนต์ใด ๆ ) Execommand สามารถปิดกั้นหรือไม่ปิดกั้น (async) ขึ้นอยู่กับวิธีที่คุณตั้งค่าพารามิเตอร์ arequiresResult หากคุณใช้พฤติกรรมการปิดกั้นส่วนประกอบยังคงจัดการคำขอที่เข้ามาจากเพียร์ ตัวอย่างเช่น ClientsOrce อาจรอการบริหารจัดการไปยังเซิร์ฟเวอร์ แต่ในขณะที่รอคอยมันสามารถให้บริการคำขอ execommand จากเซิร์ฟเวอร์!
Simple Senario: เซิร์ฟเวอร์:
- You put a TncServerSource on your form.
If you want you can change the port it is listening to via the
Port property.
- You implement an OnHandleCommand event handler and,
depending on aCmd parameter (integer), you respond the result of
the command via setting the Result of the OnHandleCommand to
anything you like (TBytes). If an exception is raised while in
HandleCommand, it is trapped, packed, transfered accross to the
calling peer, and raised at the peer's issued ExecCommand.
This way exceptions can be handled as if they were raised locally.
- You set the Active property to true. Your server is ready.
ลูกค้า:
- You put a TncClientSource on your form.
You can set Host and Port to whatever you want.
- You set Active property to true.
Your client is now connected to the server.
- You call ExecCommand (on your TncClientSource), with any
command number and data that you like. This will send your
command and data over to the server, call its OnHandleCommand,
pack the response, and return it as a result to your ExecCommand.
- ExecCommand is blocking (if aRequiresResult parameter is set to true),
but only for the current command issued.
The TncClientSource's OnHandleCommand still executes, so,
while waiting for a command to return, your client socket may be
processing requests from your server (a server can also
ExecCommand to a client).
- If you have forgotten to set Active to true and call ExecCommand,
the TncClientSource will first try to connect, so you can ommit
setting this property. It will also try to connect if it knows
it has been disconnected (and the Reconnect property is set to true).
ชุดของส่วนประกอบนี้สัญญาความเร็วที่ไม่มีใครเทียบได้และนั่นไม่ได้เป็นเพียงคำพูด:
การทดสอบเวลาอย่างง่ายด้วยการสาธิต NetComvSindy ให้ผลลัพธ์ต่อไปนี้:
เริ่มต้นด้วยหน่วยฐาน NCSockets.pas คุณจะเห็นว่าการใช้งานไม่ได้รับผลกระทบจากรหัสหย่อนมันค่อนข้างทันที อนุสัญญาการโทร แบบอินไลน์ ถูกนำมาใช้ทุกที่ที่ถือว่าเหมาะสม ฟังก์ชั่นหลักมากได้รับการทดสอบและปรับให้เหมาะสมโดยการตรวจสอบประสิทธิภาพผ่านช่วงเวลาของลูปขนาดใหญ่และการตรวจสอบการประกอบเพื่อบีบทุกประสิทธิภาพสุดท้าย
ความแตกต่างที่ยิ่งใหญ่ที่สุดแม้ว่าจะได้รับความเร็วเกิดจากสถาปัตยกรรม แตกต่างจากซ็อกเก็ตทั่วไปส่วนใหญ่:
ซ็อกเก็ตชุดนี้ไม่ได้วางไข่หรือใช้เธรดต่อการเชื่อมต่อ
ซึ่งหมายความว่า คุณสามารถมีการเชื่อมต่อสดได้มากเท่าที่คุณต้องการและคุณจะไม่เห็นความแตกต่างในการแสดง! พูลเธรดรอคำขอใด ๆ หากมีการสร้างเธรดต่อคำขอหรือต่อการเชื่อมต่อความเร็วจะได้รับมากขึ้นเนื่องจากการสร้างเธรดนั้นค่อนข้างหนักหน่วง หากจำนวนคำขอต่อวินาทีไม่สามารถจัดการได้โดยพูลเธรดพูลเธรดจะเพิ่มขึ้นเป็นขนาดที่กำหนดสูงสุดและหากยังไม่สามารถรับมือได้ไคลเอ็นต์ก็จะรอจนกว่าเซิร์ฟเวอร์จะได้รับเธรดพร้อมที่จะประมวลผลคำขอ
ได้รับความสนใจเป็นพิเศษกับปัญหาการเชื่อมต่อด้วย ตัวอย่างเช่นการตัดการเชื่อมต่อจะถูกหยิบขึ้นมาทันทีและหากเส้นนั้นแย่มากจนไม่สามารถตัดการเชื่อมต่อได้มันจะจัดการกับสิ่งนี้โดยแพ็คเก็ต Keep Alive ซึ่งจะได้รับรู้สถานะจริง มี คุณสมบัติการเชื่อมต่อใหม่ และทรัพย์สินที่เก็บรักษา เมื่อลูกค้าถูกตัดการเชื่อมต่อไม่ว่าด้วยเหตุผลใดก็ตามมันจะพยายามเชื่อมต่ออย่างโปร่งใสและไม่ส่งผลกระทบต่อประสิทธิภาพของแอปพลิเคชันหลัก วิธีนี้คุณไม่ต้องกังวลเกี่ยวกับการทำให้ลูกค้าของคุณเชื่อมต่อ
การบีบอัดและการเข้ารหัสยังเป็นมาตรฐานด้วยส่วนประกอบเหล่านี้โดยไม่ต้องใช้ไลบรารีพิเศษ แน่นอนว่าคุณสามารถใช้การบีบอัดหรือการเข้ารหัสของคุณเองได้หากคุณต้องการ แต่มันค่อนข้างมีประโยชน์ที่จะมีเพียงคุณสมบัติที่คุณสามารถตั้งค่าบนส่วนประกอบ
ชุดของส่วนประกอบนี้ยังสามารถจัดการกับข้อมูลขยะที่โยนใส่พวกเขาพวกเขาได้รับการใช้และทดสอบในโครงการขนาดใหญ่ทั่วประเทศที่สามารถมองเห็นการโจมตีทุกประเภท
ความพยายามที่โปรแกรมเมอร์ต้องใช้ในการใช้ส่วนประกอบเหล่านี้น้อยที่สุดเมื่อเทียบกับเฟรมเวิร์กอื่น ๆ โปรดดูการสาธิตเพื่อความเข้าใจที่ดีขึ้นเกี่ยวกับวิธีการใช้ส่วนประกอบเหล่านี้
เขียนโดย Demos Bill Anastasios ขอขอบคุณเป็นพิเศษสำหรับ Daniel Mauric, Tommi Prami, Roland Bengtsson สำหรับการทดสอบและคำแนะนำที่กว้างขวาง ขอบคุณมาก!
vasdemos [ที่] yahoo [dot] Co [dot] สหราชอาณาจักร
** กฎ Delphi **