ส่งและรับข้อความ Protobuf¶
กระบวนการส่งและรับข้อความแตกต่างกันระหว่างมาตรฐาน TCP และ WebSocket ด้านล่างเราอธิบายกระบวนการนี้โดยละเอียดสำหรับทั้งสองประเภทของการเชื่อมต่อ
ใช้ TCP ¶
ส่งข้อความ ¶
เพื่อส่งข้อความผ่านการเชื่อมต่อ TCP ให้ทำดังนี้:
-
เปลี่ยนข้อความ Protobuf ให้เป็นอาร์เรย์ของไบต์ (โดยใช้การเข้ารหัส Protobuf) โดยใช้ SDK Google Protocol Buffer อย่างเป็นทางการสำหรับภาษาการเขียนโปรแกรมที่คุณเลือก
-
รับความยาวของอาร์เรย์ที่สร้างขึ้นในขั้นตอนที่ 1 สร้างอาร์เรย์ไบต์ใหม่จากจำนวนเต็มนี้ ย้อนกลับอาร์เรย์ไบต์ใหม่
-
เชื่อมต่ออาร์เรย์ไบต์ใหม่และอาร์เรย์ไบต์ที่มีข้อความ Protobuf เดิม
-
ส่งอาร์เรย์ที่เชื่อมต่อไปยังสตรีมการเชื่อมต่อ
ตัวอย่างด้านล่างแสดงวิธีการดำเนินการขั้นตอนเหล่านี้ใน SDK Open API อย่างเป็นทางการ
1 2 3 4 5 6 7 | |
1 2 3 | |
เวอร์ชัน Python
เมื่อใช้ Twisted ตัวอย่าง Python จะดำเนินการเกือบเหมือนกับตัวอย่าง C# client.send(request) สามารถอธิบายได้ดังนี้
1 2 3 | |
Protocol.transport.write() อ่านข้อความ ¶
โค้ดแบบอะซิงโครนัส
Open API SDK ทั้งหมดทำงานแบบ asynchronous หมายความว่าพวกมันไม่รอให้ข้อความมาถึง แต่จะตอบสนองต่อข้อความที่มาถึงแบบไดนามิก ผลที่ได้คือ การรับข้อความมักจะทำผ่าน event handlers
เพื่ออ่านข้อความ คุณจะต้องทำลำดับการกระทำที่ย้อนกลับขั้นตอนที่จำเป็นสำหรับการส่งข้อความ
-
รับสี่ไบต์แรกของอาร์เรย์ไบต์ (จำไว้ว่า พวกมันแสดงความยาวของข้อความ) ย้อนกลับสี่ไบต์เหล่านี้และเปลี่ยนเป็นจำนวนเต็ม
-
อ่านไบต์จำนวน
Xจากสตรีม โดยที่Xคือจำนวนเต็มที่คุณได้จากขั้นตอนที่ 1 -
ใช้ Google Protobuf SDK เพื่อ deserialise ข้อความเป็น
ProtoMessageที่ถูกต้อง -
ใช้ฟิลด์
payloadTypeของออบเจ็กต์ProtoMessageเพื่อหาประเภทจริงของมัน ผ่าน Google Protobuf SDK เปลี่ยนProtoMessageเป็นออบเจ็กต์ของประเภทProtoOA...ที่ต้องการ
ตัวอย่างโค้ดด้านล่างแสดงให้เห็นว่า Open API SDKs อย่างเป็นทางการจัดการกับการอ่านข้อความอย่างไร
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 | |
เวอร์ชัน Python
ในตัวอย่าง Python การดำเนินการทั้งหมดกับไบต์ในการรับข้อความจะถูกจัดการโดยเมธอด dataReceived() ดังที่แสดงด้านล่าง
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | |
1 2 3 4 5 6 7 8 | |
ใช้ WebSocket ¶
ส่งข้อความ ¶
เพื่อส่งข้อความผ่านการเชื่อมต่อ WebSocket ให้ทำตามขั้นตอนต่อไปนี้:
-
Serialise ข้อความเป็นรูปแบบข้อมูลที่เหมาะสม (เช่น สตริง)
-
เพิ่มข้อความที่ serialise แล้วเข้าไปในคิวส่งของคุณ
ตัวอย่างด้านล่างแสดงให้เห็นว่าขั้นตอนเหล่านี้ดำเนินการอย่างไรใน Open API SDKs อย่างเป็นทางการ
C# SDK ใช้คลาส WebsocketClient ซึ่งเป็นส่วนหนึ่งของแพ็คเกจ Websocket.Client ดังที่แสดงด้านล่าง เมธอด WebsocketClient.Send() ทำงานดังนี้
1 2 3 4 5 | |
อย่างที่คุณเห็น ไคลเอนต์เพียงเพิ่มเซ็กเมนต์อาร์เรย์เข้าไปในคิวส่ง
SDK Python ไม่รองรับมาตรฐาน WebSocket
รับข้อความ ¶
เพื่อรับข้อความผ่านการเชื่อมต่อ WebSocket ให้ทำตามขั้นตอนต่อไปนี้:
-
ดึงข้อมูลที่ได้รับจาก backend ของ cTrader
-
Deserialise ข้อมูลเป็น Protobuf message ที่ถูกต้อง
สำหรับการแสดงวิธีการนี้ใน Open API SDKs อย่างเป็นทางการ ดูตัวอย่างโค้ดด้านล่าง
เพื่อรับข้อความ WebsocketClient จำเป็นต้องสมัครสมาชิกกับฟังก์ชัน callback ที่จัดการสิ่งที่ไคลเอนต์ทำเมื่อรับข้อความใหม่
1 2 | |
ก่อนสมัครสมาชิก .NET SDK จะแยกข้อความเป็น Protobuf message การสมัครสมาชิกที่จำเป็นจะถูกเพิ่มในเนื้อหาของ callback ConnectWebSocket()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | |
ใน callback OnNext() ProtoMessage จะถูกส่งไปยัง callback MessageFactory.GetMessage()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | |
SDK Python ไม่รองรับมาตรฐาน WebSocket