ฟังก์ชันตัวจัดการเหตุการณ์ onread, onready, onclose ใน Ocaml

ฉันกำลังพัฒนาโปรโตคอลโดยใช้ซ็อกเก็ต TCP/IP ใน Ocaml และฉันสนใจที่จะนำแนวทางที่ขับเคลื่อนด้วยเหตุการณ์ไปใช้ โดยพื้นฐานแล้ว ฉันต้องการสร้างฟังก์ชันการจัดการเหตุการณ์ที่เรียกใช้เมื่อใดก็ตามที่ซ็อกเก็ตได้รับข้อมูลใหม่หรือปิดหรือเปิด

เป็นไปได้ไหมที่จะทำใน Ocaml โดยไม่ต้องใช้งานด้วยตนเองโดยใช้หลายเธรด

ขอบคุณ,


person Jason    schedule 24.05.2013    source แหล่งที่มา


คำตอบ (1)


ใช่. สร้างลูปและใช้ Unix.select เพื่อรอกิจกรรมบน fds ของคุณ คุณจะต้องตั้งค่าซ็อกเก็ตของคุณเป็นโหมดไม่ปิดกั้นด้วย Unix.set_nonblock เพื่อให้การอ่านและเขียนของคุณไม่บล็อกและคุณสามารถกลับไปที่การเลือกของคุณได้หากไม่มีข้อมูลที่จะอ่าน/เขียน (เพราะแม้ว่า select จะส่งคืน fds ที่สามารถอ่าน/เขียนได้ให้กับคุณ แต่ก็ไม่ได้หมายความว่าการอ่าน/เขียนบน พวกเขาจะไม่ปิดกั้น)

person Daniel Bünzli    schedule 24.05.2013
comment
เป็นไปได้ไหมที่คุณจะยกตัวอย่างการนำสิ่งนี้ไปใช้? - person Jason; 24.05.2013
comment
Google ระบุว่า mega-nerd.com/erikd/Blog/CodeHacking/ Ocaml/ocaml_select.html - person Daniel Bünzli; 24.05.2013