Bagaimana cara mengimplementasikan I/O soket non-pemblokiran?

Oct 15, 2025

Tinggalkan pesan

Lucy Liu
Lucy Liu
Saya seorang analis data yang berspesialisasi dalam mengevaluasi kinerja produk elektronik rumah kami. Dengan menganalisis umpan balik pengguna dan metrik produk, saya membantu meningkatkan fungsionalitas dan keandalan sakelar, soket, dan detektor karbon monoksida kami.

Yo, apa kabar semuanya! Saya pemasok soket, dan hari ini saya ingin mengobrol tentang cara mengimplementasikan I/O soket non-pemblokiran. Ini adalah topik yang cukup keren yang benar-benar dapat meningkatkan level permainan soket Anda, jadi mari selami lebih dalam.

Pertama, mari kita bahas tentang apa sebenarnya I/O soket non-pemblokiran itu. Saat Anda berurusan dengan soket, memblokir I/O berarti program Anda akan berhenti dan menunggu hingga operasi tertentu selesai. Misalnya, jika Anda mencoba membaca data dari soket, program hanya akan diam di sana hingga data tiba. Ini bisa sangat menyusahkan, terutama jika Anda berurusan dengan banyak soket atau jika Anda ingin program Anda responsif.

Sebaliknya, I/O soket non-pemblokiran memungkinkan program Anda terus melakukan hal lain sambil menunggu operasi I/O selesai. Daripada menunggu, program Anda dapat memeriksa apakah suatu operasi sudah siap dan melanjutkan jika belum. Hal ini dapat menghasilkan program yang jauh lebih efisien dan responsif.

Jadi, bagaimana Anda menerapkan I/O soket non-pemblokiran? Itu tergantung pada bahasa pemrograman yang Anda gunakan, tapi saya akan memberikan gambaran umum menggunakan Python sebagai contoh.

Contoh Python

Dengan Python, Anda dapat menggunakanstopkontakmodul untuk bekerja dengan soket. Untuk membuat soket tidak menghalangi, Anda dapat menggunakanpemblokiran setmetode. Berikut ini contoh sederhananya:

Socket china 1 Gang Switched Universal Socket And Multi Function Socket

import socket # Buat objek soket sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # Atur soket ke mode non-blocking sock.setblocking(0) # Coba sambungkan ke server coba: sock.connect(('example.com', 80)) kecuali BlockingIOError: print('Koneksi sedang berlangsung...') # Sekarang Anda dapat melakukan hal lain saat koneksi sedang dibuat

Dalam contoh ini, pertama-tama kita membuat objek soket dan kemudian mengaturnya ke mode non-pemblokiran menggunakanpemblokiran setmetode dengan argumen0. Saat kami mencoba menyambung ke server, jika sambungan tidak dapat segera dibuat, aMemblokirIOErrorakan dibangkitkan. Kita dapat menangkap kesalahan ini dan terus melakukan hal lain saat koneksi sedang dibuat.

Memilih Soket

Aspek penting lainnya dari I/O soket non-pemblokiran adalah kemampuan untuk memantau beberapa soket secara bersamaan. Dengan Python, Anda dapat menggunakanmemilihmodul untuk melakukan ini. Itumemilihfungsi ini memungkinkan Anda menentukan daftar soket yang akan dipantau untuk kejadian baca, tulis, dan kesalahan.

Berikut ini contohnya:

import socket import select # Buat daftar soket untuk dipantau input = [] outputs = [] # Buat objek soket sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.setblocking(0) inputs.append(sock) # Coba sambungkan ke server coba: sock.connect(('example.com', 80)) kecuali BlockingIOError: pass while True: # Gunakan pilih untuk memantau soket dapat dibaca, dapat ditulis, luar biasa = select.select(inputs, outputs, inputs) for s in readable: if s is sock: # Baca data dari soket data = s.recv(1024) if data: print('Received data:', data) else: # Sambungan ditutup inputs.remove(s) s.close() for s in writable: if s is sock: # Kirim data ke soket s.sendall(b'Halo, server!') outputs.remove(s) for s dalam keadaan luar biasa: # Tangani kondisi luar biasa inputs.remove(s) outputs.remove(s) s.close()

Dalam contoh ini, pertama-tama kita membuat daftar soket untuk memantau kejadian baca, tulis, dan kesalahan. Kami kemudian menggunakanmemilihberfungsi untuk menunggu kejadian pada soket tersebut. Ketika suatu peristiwa terjadi, kami menanganinya sebagaimana mestinya.

Manfaat Soket I/O Tanpa Pemblokiran

Ada beberapa manfaat menggunakan I/O soket non-pemblokiran. Salah satu manfaat utamanya adalah peningkatan kinerja. Dengan membiarkan program Anda terus melakukan hal lain sambil menunggu operasi I/O selesai, Anda dapat menggunakan sumber daya sistem dengan lebih efisien.

Manfaat lainnya adalah peningkatan daya tanggap. Program Anda dapat merespons peristiwa lain sambil menunggu operasi I/O, yang dapat menghasilkan pengalaman pengguna yang lebih baik.

Produk Soket Kami

Sebagai pemasok soket, kami menawarkan berbagai macam produk soket berkualitas tinggi. Lihat kamiSoket Saklar 13A 2gang, yang sempurna untuk banyak aplikasi. Kami juga memilikiSoket 13A Standar Inggris(BS 1363-2)Bersertifikat CE, yang memenuhi standar tertinggi. Dan jika Anda mencari sesuatu yang lebih serbaguna, kami1 Gang Beralih Soket Universal Dan Soket Multi Fungsiadalah pilihan yang bagus.

Hubungi Kami untuk Pengadaan

Jika Anda tertarik dengan produk soket kami atau memiliki pertanyaan tentang I/O soket non-pemblokiran, jangan ragu untuk menghubungi kami untuk pengadaan dan diskusi lebih lanjut. Kami selalu di sini untuk membantu Anda menemukan solusi terbaik untuk kebutuhan Anda.

Referensi

  • Dokumentasi Python: https://docs.python.org/3/library/socket.html
  • Tutorial Pemrograman Soket: https://realpython.com/python-sockets/
Kirim permintaan