Fungsi event handler soket onread, onready, onclose di Ocaml

Saya sedang mengembangkan protokol menggunakan soket TCP/IP di Ocaml dan saya tertarik menerapkan pendekatan berbasis peristiwa. Pada dasarnya, saya ingin membuat fungsi penanganan acara yang dipanggil setiap kali soket menerima data baru atau ditutup atau dibuka.

Apakah mungkin melakukannya di Ocaml tanpa mengimplementasikannya secara manual menggunakan banyak utas?

Terima kasih,


person Jason    schedule 24.05.2013    source sumber


Jawaban (1)


Ya. Buat loop dan gunakan Unix.select untuk menunggu acara di fds Anda. Anda harus menyetel soket Anda ke mode non-pemblokiran dengan Unix.set_nonblock sehingga pembacaan dan penulisan Anda tidak diblokir dan Anda dapat kembali ke pilihan Anda jika tidak ada data untuk dibaca/ditulis (karena meskipun select mengembalikan Anda fds yang dapat dibaca/ditulis, itu tidak berarti bahwa baca/tulis aktif mereka tidak akan memblokir).

person Daniel Bünzli    schedule 24.05.2013
comment
Bisakah Anda memberi saya contoh penerapan ini? - person Jason; 24.05.2013
comment
Google mengatakan mega-nerd.com/erikd/Blog/CodeHacking/ Ocaml/ocaml_select.html - person Daniel Bünzli; 24.05.2013