โบลต์ (โปรโตคอลเครือข่าย)
| สายฟ้า | |
|---|---|
| ผู้เขียนต้นฉบับ | นีโอ4เจ |
| เวอร์ชันเสถียร | เวอร์ชัน 6.0 |
| เขียนเป็น | ภาษาต่างๆ |
| ระบบปฏิบัติการ | ใดๆ |
| แพลตฟอร์ม | ข้ามแพลตฟอร์ม |
| พิมพ์ | โปรโตคอลเครือข่าย |
| ใบอนุญาต | ลิขสิทธิ์ Creative Commons 3.0 Attribution-ShareAlike |
| เว็บไซต์ | www.neo4j.com/docs/bolt/current/ |
โปรโตคอลBolt ( Bolt ) เป็นโปรโตคอลเครือข่ายแบบเชื่อมต่อ ที่ใช้สำหรับ การสื่อสาร ระหว่างไคลเอ็นต์และเซิร์ฟเวอร์ใน แอปพลิเคชัน ฐานข้อมูลโดยทำงานผ่าน การเชื่อมต่อ TCPหรือWebSocket
Bolt เป็นภาษาโปรแกรมที่เน้นการประมวลผลคำสั่ง โดยอนุญาตให้ไคลเอนต์ส่งข้อความที่มีคำสั่งซึ่งประกอบด้วยสตริงเดียวและชุดพารามิเตอร์ที่กำหนดประเภทไว้ เซิร์ฟเวอร์จะตอบกลับแต่ละคำสั่งด้วยข้อความผลลัพธ์และสตรีมของระเบียนผลลัพธ์ (ถ้ามี)
ประวัติศาสตร์
โปรโตคอล Bolt ได้รับการแนะนำสู่สาธารณะเป็นครั้งแรกในเดือนพฤศจิกายน 2015 ระหว่างการสัมภาษณ์ที่ดำเนินการโดย Duncan Brown และเผยแพร่บนDZone [ 1 ] การเปิดตัวซอฟต์แวร์ที่ใช้โปรโตคอลครั้งแรกเกิดขึ้นในเดือนธันวาคม 2015 ซึ่งเป็นส่วนหนึ่งของการเปิดตัว Neo4j Server เวอร์ชันสำคัญ[ 2 ]ในเดือนเมษายน 2016 Neo4j Server 3.0 ได้รับการเผยแพร่และมีการใช้งานโปรโตคอลบนเซิร์ฟเวอร์เป็นครั้งแรก พร้อมด้วยชุดไดรเวอร์ไคลเอ็นต์ Bolt การเปิดตัวครั้งนี้ได้รับความสนใจจากสื่อกระแสหลักหลายแห่ง[ 3 ] [ 4 ] [ 5 ]
การกำหนดเวอร์ชัน
โปรโตคอลเครือข่าย Bolt ใช้การเจรจาเวอร์ชันเพื่อให้มั่นใจถึงความเข้ากันได้ระหว่างไคลเอ็นต์และเซิร์ฟเวอร์ ไคลเอ็นต์ส่งเวอร์ชันโปรโตคอลที่รองรับได้สูงสุดสี่เวอร์ชัน โดยเข้ารหัสเป็นจำนวนเต็ม 32 บิต โดยให้ความสำคัญกับรายการก่อนหน้า เซิร์ฟเวอร์จะตอบกลับด้วยเวอร์ชันที่เข้ากันได้สูงสุดหรือค่าศูนย์หากไม่พบการจับคู่ และปิดการเชื่อมต่อ ตั้งแต่ Bolt 4.0 เป็นต้นไป โปรโตคอลรองรับการกำหนดเวอร์ชันหลักและเวอร์ชันรอง Bolt 4.3 ได้แนะนำการกำหนดเวอร์ชันรองตามช่วง ทำให้ไคลเอ็นต์สามารถระบุเวอร์ชันรองที่ต่อเนื่องกันได้อย่างกระชับ[ 6 ]
ภาพรวมของโปรโตคอล
มีการออกเวอร์ชันใหม่ของโปรโตคอลเป็นประจำ โดยมีการปรับปรุงประสิทธิภาพ ฟังก์ชันการทำงาน และความเข้ากันได้อยู่เสมอ
การส่งข้อความ

ทั้งไคลเอ็นต์และเซิร์ฟเวอร์ของ Bolt ส่งข้อมูลผ่านการเชื่อมต่อในรูปแบบของลำดับข้อความ แต่ละข้อความจะมีประเภท (ระบุด้วยไบต์ "ลายเซ็น") และอาจมีข้อมูลเพิ่มเติม ไคลเอ็นต์เป็นผู้ควบคุมการสื่อสาร และแต่ละข้อความที่ไคลเอ็นต์ส่งไปจะทำให้เซิร์ฟเวอร์ส่งข้อความตอบกลับอย่างน้อยหนึ่งข้อความ
ข้อมูลต่อไปนี้เกี่ยวข้องกับ Bolt เวอร์ชัน 5.8 และอาจไม่สะท้อนถึงการพัฒนาล่าสุดในโปรโตคอล
ข้อความจากลูกค้า:
| พิมพ์ | ลายเซ็น |
|---|---|
| สวัสดี | 0x01 [ 7 ] |
| เข้าสู่ระบบ | 0x6A [ 8 ] |
| ออกจากระบบ | 0x6B [ 9 ] |
| ระบบวัดระยะทาง | 0x54 [ 10 ] |
| ลาก่อน | 0x02 [ 11 ] |
| รีเซ็ต | 0x0F [ 12 ] |
| วิ่ง | 0x10 [ 13 ] |
| ทิ้ง | 0x2F [ 14 ] |
| ดึง | 0x3F [ 15 ] |
| เริ่ม | 0x11 [ 16 ] |
| ให้สัญญา | 0x12 [ 17 ] |
| ย้อนกลับ | 0x13 [ 18 ] |
| เส้นทาง | 0x66 [ 19 ] |
ข้อความจากเซิร์ฟเวอร์:
| พิมพ์ | ลายเซ็น |
|---|---|
| ความสำเร็จ | 0x70 [ 20 ] |
| ความล้มเหลว | 0x7F [ 21 ] |
| เพิกเฉย | 0x7E [ 22 ] |
| บันทึก | 0x71 [ 23 ] |
การเข้ารหัสการถ่ายโอนข้อความ
แต่ละข้อความจะถูกเข้ารหัสเป็นลำดับของไบต์ ไบต์เหล่านี้จะถูกส่งผ่านโดยใช้การเข้ารหัสแบบไบนารีแบบแบ่งเป็นส่วนๆ (binary chunked encoding ) โดยแต่ละส่วนจะนำหน้าด้วยจำนวนเต็ม 16 บิตแบบไม่มีเครื่องหมาย (unsigned, big-endian 16-bit integer) ซึ่งระบุจำนวนไบต์ที่จะตามมาทันที และใช้ค่า 0 เพื่อระบุจุดสิ้นสุดของข้อความ
การจัดการความล้มเหลว
ไคลเอนต์อาจส่งข้อความหลายข้อความไปยังเซิร์ฟเวอร์โดยไม่ต้องรอการตอบกลับก่อน[ 24 ]เซิร์ฟเวอร์จะประมวลผลแต่ละข้อความตามลำดับ อย่างไรก็ตาม เนื่องจากอาจมีความสัมพันธ์เชิงตรรกะระหว่างข้อความที่ส่งโดยไคลเอนต์ เซิร์ฟเวอร์จะไม่ประเมินคำขอที่ได้รับหลังจากส่งข้อความ FAILURE เพื่อตอบสนองต่อข้อความก่อนหน้า แต่จะส่งข้อความ IGNORED เพื่อตอบกลับข้อความของไคลเอนต์ทุกข้อความ จนกว่าไคลเอนต์จะรับทราบความล้มเหลวโดยการส่งข้อความ RESET
นี่คล้ายคลึงกับการจัดการและกู้คืนความล้มเหลวในโปรโตคอลการสื่อสารของPostgreSQL
ภาพรวม PackStream - เวอร์ชัน 1
PackStream เป็นรูปแบบการนำเสนอแบบไบนารีสำหรับการแลกเปลี่ยนข้อมูลที่มีประเภทข้อมูลที่หลากหลาย โดยทำหน้าที่เป็นเลเยอร์ไวยากรณ์สำหรับโปรโตคอลการส่งข้อความ Bolt
การเข้ารหัสข้อมูล
Bolt รองรับการเข้ารหัสสำหรับประเภทข้อมูลที่หลากหลาย
| พิมพ์ | คำอธิบาย |
|---|---|
| ว่าง[ 25 ] | แสดงถึงการไม่มีค่า |
| บูลีน[ 26 ] | ค่าบูลีนจริงหรือเท็จ |
| จำนวนเต็ม[ 27 ] | จำนวนเต็ม 64 บิตแบบมีเครื่องหมาย |
| ลอย[ 28 ] | เลขทศนิยม 64 บิต |
| ไบต์[ 29 ] | อาร์เรย์ไบต์ |
| สตริง[ 30 ] | สตริงที่เข้ารหัสแบบ UTF-8 |
| รายการ[ 31 ] | ชุดของค่าที่เรียงลำดับแล้ว |
| พจนานุกรม[ 32 ] | ชุดข้อมูลแบบคีย์-ค่า (ไม่รับประกันลำดับ) |
| โครงสร้าง[ 33 ] | ค่าผสมที่มีลายเซ็นประเภท |
ลิงก์ภายนอก
- ข้อกำหนดโปรโตคอล Bolt