aioble --- BLE غير المتزامن¶
aioble هو غلاف عالي المستوى ومتوافق مع asyncio حول وحدة bluetooth. يوفر دوال coroutine نظيفة للمسح والاتصال والإعلان وخدمات GATT وقنوات L2CAP.
جميع العمليات البعيدة (الاتصال، قطع الاتصال، القراءة/الكتابة من العميل، الإشارة من الخادم، استقبال/إرسال l2cap، الإقران) قابلة للانتظار (awaitable) وتدعم المهل الزمنية.
الأدوار المدعومة:
المُذيع (المُعلِن) --- توليد حمولات الإعلان والاستجابة للمسح للحقول الشائعة، تقسيم الحمولة تلقائياً بين الإعلان واستجابة المسح، الإعلان إلى أجل غير مسمى أو لمدة محددة.
الطرفية (Peripheral) --- انتظار الاتصال من جهاز مركزي، انتظار تبادل MTU.
المراقب (الماسح) --- المسح السلبي والنشط، دمج حمولات الإعلان والاستجابة للمسح لنفس الجهاز، تحليل الحقول الشائعة من حمولات الإعلان.
المركزي (Central) --- الاتصال بجهاز طرفي، بدء تبادل MTU.
عميل GATT --- اكتشاف الخدمات / الخصائص / الواصفات (اختيارياً عبر UUID)؛ القراءة / الكتابة / الكتابة-مع-استجابة على الخصائص والواصفات؛ الاشتراك في الإشعارات والإشارات (عبر CCCD)؛ انتظار الإشعارات والإشارات.
خادم GATT --- تسجيل الخدمات / الخصائص / الواصفات؛ انتظار عمليات الكتابة على الخصائص والواصفات؛ اعتراض طلبات القراءة؛ إرسال الإشعارات والإشارات (وانتظار الاستجابة).
L2CAP --- قبول وإنشاء قنوات L2CAP الموجهة للاتصال، إدارة التحكم في تدفق القناة.
الأمان --- إدارة المفاتيح/الأسرار المدعومة بـ JSON، بدء الإقران، الاستعلام عن حالة التشفير / المصادقة.
أمثلة¶
امسح بحثاً عن أجهزة BLE القريبة واطبع كل جهاز بمجرد رؤيته:
import aioble
import asyncio
async def find_devices():
async with aioble.scan(duration_ms=5000, active=True) as scanner:
async for result in scanner:
print(result.device.addr_hex(), result.rssi, result.name())
asyncio.run(find_devices())
اتصل بجهاز طرفي يُعلن عن خدمة معدل ضربات القلب بصفتك جهازاً مركزياً واشترك في إشعارات قياساته:
import aioble
import asyncio
import bluetooth
_HR_SERVICE = bluetooth.UUID(0x180D)
_HR_MEASUREMENT = bluetooth.UUID(0x2A37)
async def connect_and_read():
device = None
async with aioble.scan(duration_ms=5000, active=True) as scanner:
async for result in scanner:
if _HR_SERVICE in result.services():
device = result.device
break
if device is None:
return
async with await device.connect() as conn:
service = await conn.service(_HR_SERVICE)
char = await service.characteristic(_HR_MEASUREMENT)
await char.subscribe(notify=True)
while True:
data = await char.notified()
print("notify:", data)
asyncio.run(connect_and_read())
اعمل بصفتك جهازاً طرفياً: سجّل خدمة GATT، وأعلن عنها، وادفع الإشعارات إلى أي جهاز يتصل:
import aioble
import asyncio
import bluetooth
import struct
_ENV_SERVICE = bluetooth.UUID(0x181A)
_TEMP_CHAR = bluetooth.UUID(0x2A6E)
def encode_temperature(deg_c):
# Bluetooth Temperature (0x2A6E) is sint16 little-endian, 0.01 degC units.
return struct.pack("<h", round(deg_c * 100))
service = aioble.Service(_ENV_SERVICE)
temp_char = aioble.Characteristic(service, _TEMP_CHAR, read=True, notify=True)
aioble.register_services(service)
async def peripheral_task():
while True:
connection = await aioble.advertise(
interval_us=250000,
name="openmv-sensor",
services=[_ENV_SERVICE],
appearance=0x0300,
)
print("connected:", connection.device.addr_hex())
async with connection:
while connection.is_connected():
temp_char.write(encode_temperature(23.68), send_update=True)
await asyncio.sleep(1)
asyncio.run(peripheral_task())
دوال على مستوى الوحدة¶
- aioble.config(*args, **kwargs) Any¶
يُمرَّر إلى
bluetooth.BLE.config()، مع ضمان أن يكون راديو BLE نشطاً أولاً.- args
اسم معامل وحيد اختياري للاستعلام عنه.
- kwargs
وسائط مفتاحية لتعيين قيم الإعداد.
- aioble.stop() None¶
إلغاء تنشيط راديو BLE الأساسي وتشغيل أي معالجات إغلاق مسجلة للوحدات الفرعية. بعد استدعاء هذا، يتم تفكيك جميع الماسحات والمُعلِنات والاتصالات وقنوات L2CAP.
- aioble.scan(duration_ms: int, interval_us: int | None = None, window_us: int | None = None, active: bool = False) scan¶
يُرجع مدير سياق غير متزامن / مُكرِّراً غير متزامن من نوع
scanيُنتج نسخScanResultلكل جهاز فريد يُكتشف (أو لكل قطعة جديدة من بيانات الإعلان من جهاز معروف).- duration_ms
مدة المسح بالميلي ثانية. مرّر
0للمسح إلى أجل غير مسمى حتى يخرج مدير السياق.- interval_us
فترة المسح بالميكرو ثانية. القيمة الافتراضية هي 1,280,000.
- window_us
نافذة المسح بالميكرو ثانية (يجب أن تكون أصغر من أو مساوية لـ interval_us). القيمة الافتراضية هي 11,250.
- active
إذا كانت
True، يُجرى مسح نشط (طلب بيانات استجابة المسح). القيمة الافتراضية هيFalse.
- aioble.advertise(interval_us: int, adv_data: bytes | None = None, resp_data: bytes | None = None, connectable: bool = True, limited_disc: bool = False, br_edr: bool = False, name: str | None = None, services: list | None = None, appearance: int = 0, manufacturer: tuple | None = None, timeout_ms: int | None = None) DeviceConnection¶
دالة coroutine غير متزامنة تبدأ الإعلان وتنتظر اتصالاً وارداً من جهاز مركزي. تُرجع
DeviceConnectionيمثل الجهاز المركزي المتصل، أو تطلقasyncio.TimeoutErrorعند انتهاء المهلة.- interval_us
فترة الإعلان بالميكرو ثانية.
- adv_data
حمولة الإعلان الخام. إذا لم تُحدَّد، تُبنى adv_data من الوسائط المفتاحية المتبقية.
- resp_data
حمولة استجابة المسح الخام. تُملأ تلقائياً بما يفيض من adv_data عند الحاجة.
- connectable
إذا كانت
True، فهذا إعلان قابل للاتصال.- limited_disc
استخدام علامة القابلية المحدودة للاكتشاف بدلاً من العامة.
- br_edr
تعيين علامة دعم BR/EDR.
- name
اسم محلي كامل اختياري لتضمينه.
- services
كائن قابل للتكرار من
bluetooth.UUIDللإعلان عنه.- appearance
قيمة المظهر بـ 16 بت (انظر الأرقام المخصصة لـ Bluetooth).
- manufacturer
صف (tuple) من
(company_id, data_bytes)للإعلان عنه كبيانات خاصة بالمُصنِّع.- timeout_ms
إيقاف الإعلان بعد هذا العدد من الميلي ثانية دون اتصال. القيمة
Noneتعني الإعلان حتى يحدث الاتصال.
ثوابت على مستوى الوحدة¶
- aioble.ADDR_PUBLIC¶
نوع عنوان جهاز BLE العام (
0).
- aioble.ADDR_RANDOM¶
نوع عنوان جهاز BLE العشوائي (
1).
الاستثناءات¶
- exception aioble.GattError¶
يُطلق عندما تكتمل عملية GATT بعيدة (قراءة / كتابة / إشارة) بحالة غير صفرية. يتوفر رمز الحالة في السمة
_status.
- exception aioble.DeviceDisconnectedError¶
يُطلق داخل عملية غير متزامنة (مثل القراءة، الكتابة، الإشعار) عندما يسقط الاتصال الأساسي أثناء الانتظار.
- exception aioble.L2CAPDisconnectedError¶
يُطلق عند محاولة عملية إرسال/استقبال/تفريغ على قناة L2CAP مقطوعة (أو عند مقاطعتها بسببها).
- exception aioble.L2CAPConnectionError¶
يُطلق بواسطة
DeviceConnection.l2cap_connectعند فشل إنشاء القناة. رمز حالة Bluetooth هو الوسيط الأول.
الأصناف¶
- class aioble.Device(addr_type: int, addr: bytes | str)¶
يمثل جهاز BLE بعيداً بواسطة العنوان. تتساوى نسختان من
Deviceإذا تطابق كل من addr_type و addr. يُستخدم كمقبض لبدء الاتصالات.- addr_type
إما
ADDR_PUBLICأوADDR_RANDOM.- addr
عنوان من ستة بايتات بصيغة
bytes، أو سلسلة سداسية عشرية مفصولة بنقطتين (مثل"aa:bb:cc:dd:ee:ff").
- addr_type¶
نوع العنوان الذي أُنشئ به الجهاز.
- addr¶
عنوان الجهاز الخام من ستة بايتات.
- connect(timeout_ms: int = 10000, scan_duration_ms: int | None = None, min_conn_interval_us: int | None = None, max_conn_interval_us: int | None = None) Awaitable[DeviceConnection]¶
غير متزامنة. تبدأ اتصال GAP بهذا الجهاز وتُرجع
DeviceConnectionالناتج. تلغي أي مسح قيد التنفيذ.- timeout_ms
مدة انتظار اكتمال الاتصال.
- scan_duration_ms
مدة المسح الأولية قبل الاتصال (خاصة بالمتحكم).
- min_conn_interval_us / max_conn_interval_us
حدود فترة الاتصال الاختيارية بالميكرو ثانية.
- class aioble.DeviceConnection¶
اتصال GAP نشط بجهاز
Device. يُرجَع بواسطةDevice.connect()أوadvertise. يدعم الاستخدام كمدير سياقasync withيقطع الاتصال تلقائياً عند الخروج.لا تنشئه مباشرة.
- encrypted¶
Trueبمجرد تشفير الرابط (مثلاً بعد الإقران).
- authenticated¶
Trueإذا كان الرابط مُصادَقاً عليه (إقران محمي ضد MITM).
- bonded¶
Trueإذا أنتج الإقران مفاتيح ربط (bonding).
- key_size¶
حجم مفتاح التشفير المتفاوض عليه بالبايتات، أو
Falseإذا لم يكن مشفراً.
- mtu¶
قيمة ATT MTU المتفاوض عليها بعد
exchange_mtu، أوNoneحتى تُعيَّن.
- disconnect(timeout_ms: int = 2000) Awaitable[None]¶
غير متزامنة. تقطع الاتصال وتنتظر مقاطعة قطع الاتصال (IRQ).
- timeout_ms
الحد الأقصى لزمن انتظار قطع الاتصال.
- disconnected(timeout_ms: int | None = None, disconnect: bool = False) Awaitable[None]¶
غير متزامنة. تنتظر إنهاء الاتصال من قبل أي من الطرفين. إذا كانت disconnect تساوي
Trueفإنها تقطع الاتصال بنشاط أولاً.- timeout_ms
الحد الأقصى لزمن الانتظار. القيمة
Noneتعني الانتظار إلى الأبد.- disconnect
إذا كانت
True، تبدأ قطع الاتصال.
- timeout(timeout_ms: int | None) DeviceTimeout¶
يُرجع مدير سياق يلغي جسده إذا انقضت المهلة (مُطلقاً
asyncio.TimeoutError) أو إذا انقطع اتصال الجهاز (مُطلقاًDeviceDisconnectedError).- timeout_ms
المهلة بالميلي ثانية، أو
Noneلعدم وجود مهلة.
- exchange_mtu(mtu: int | None = None, timeout_ms: int = 1000) Awaitable[int]¶
غير متزامنة. تبدأ تبادل ATT MTU وتُرجع قيمة MTU المتفاوض عليها.
- mtu
قيمة MTU المفضلة الاختيارية لتعيينها على واجهة BLE الأساسية قبل التبادل.
- timeout_ms
مهلة التبادل.
- service(uuid: bluetooth.UUID, timeout_ms: int = 2000) Awaitable[ClientService | None]¶
غير متزامنة. تكتشف خدمة بعيدة وحيدة تطابق uuid، أو
Noneإذا لم تُعثر عليها.
- services(uuid: bluetooth.UUID | None = None, timeout_ms: int = 2000) ClientDiscover¶
يُرجع مُكرِّراً غير متزامن من كائنات
ClientServiceالبعيدة. استخدمه معasync forوشغّل الحلقة حتى اكتمالها.- uuid
مرشّح UUID اختياري. القيمة
Noneتُرجع كل خدمة.- timeout_ms
مهلة لكل عملية اكتشاف.
- pair(bond: bool = True, le_secure: bool = True, mitm: bool = False, io: int = 3, timeout_ms: int = 20000) Awaitable[None]¶
غير متزامنة. تبدأ الإقران على هذا الاتصال. تُحدّث السمات
encrypted/authenticated/bonded/key_sizeعند الاكتمال.- bond
إبقاء مفاتيح الإقران (persist).
- le_secure
استخدام LE Secure Connections.
- mitm
اشتراط الحماية من هجمات الوسيط (man-in-the-middle).
- io
ثابت قدرة الإدخال/الإخراج (مثل
3لعدم وجود إدخال/إخراج).- timeout_ms
مهلة الإقران.
- l2cap_accept(psm: int, mtu: int, timeout_ms: int | None = None) Awaitable[L2CAPChannel]¶
غير متزامنة. تستمع على الـ PSM المحدد وتُرجع
L2CAPChannelبمجرد فتح الطرف البعيد لها.- psm
مُجمِّع البروتوكول/الخدمة (PSM) للاستماع عليه.
- mtu
الحد الأقصى لحجم الاستقبال بالبايتات.
- timeout_ms
الحد الأقصى لزمن انتظار اتصال الطرف البعيد.
- l2cap_connect(psm: int, mtu: int, timeout_ms: int = 1000) Awaitable[L2CAPChannel]¶
غير متزامنة. تفتح قناة L2CAP إلى الطرف البعيد على الـ PSM المحدد.
- psm
مُجمِّع البروتوكول/الخدمة (PSM) للاتصال به.
- mtu
الحد الأقصى لحجم الاستقبال بالبايتات.
- timeout_ms
مهلة الاتصال.
- class aioble.ScanResult¶
جهاز وحيد اكتُشف أثناء
scan. تُعاد النسخة نفسها كلما وصلت بيانات إعلان جديدة.لا تنشئه مباشرة.
- rssi¶
آخر قيمة RSSI مُبلَّغ عنها بوحدة dBm.
- adv_data¶
حمولة الإعلان الخام (
bytesأوNone).
- resp_data¶
حمولة استجابة المسح الخام (
bytesأوNone)، إذا كان المسح النشط ممكّناً.
- connectable¶
Trueإذا كان أحدث إعلان قابلاً للاتصال.
- name() str | None¶
يفك ترميز الاسم المحلي المُعلَن الكامل (أو المختصر) من الحمولة، أو
Noneإذا لم يكن موجوداً.
- services() Iterator[bluetooth.UUID]¶
مولّد (generator) يُنتج كل
bluetooth.UUIDمُعلَن عنه في حقول قائمة الخدمات بـ 16/32/128 بت.
- class aioble.Service(uuid: bluetooth.UUID)¶
خدمة GATT محلية. ابنِ خدمة بنسخة
Characteristicواحدة أو أكثر، ثم مرّرها إلىregister_services.- uuid
معرّف UUID للخدمة.
- uuid¶
معرّف UUID للخدمة.
- characteristics¶
قائمة بكائنات
Characteristicالمرتبطة بهذه الخدمة.
- class aioble.Characteristic(service: Service, uuid: bluetooth.UUID, read: bool = False, write: bool = False, write_no_response: bool = False, notify: bool = False, indicate: bool = False, initial: bytes | None = None, capture: bool = False)¶
خاصية GATT محلية. يؤدي إنشاء واحدة تلقائياً إلى إلحاقها بـ service.
- service
كائن
Serviceالمالك.- uuid
معرّف UUID للخاصية.
- read, write, write_no_response, notify, indicate
قيم منطقية (Booleans) تختار عمليات GATT المدعومة.
- initial
قيمة أولية اختيارية (
bytes).- capture
إذا كانت
True، تُوضع القيم المكتوبة في طابور (حتى عمق 10) بحيث لا تُفقد عمليات الكتابة المتتالية السريعة. ثم يُرجع كل استدعاء لـwrittenصفاً (tuple) من نوع(connection, data).
- uuid¶
معرّف UUID للخاصية.
- flags¶
قناع بِتّي (bitmask) لعلامات خاصية GATT المبني من المُنشئ.
- descriptors¶
قائمة بكائنات
Descriptorالمرتبطة بهذه الخاصية.
- write(data: bytes, send_update: bool = False) None¶
تحديث القيمة في قاعدة بيانات GATT المحلية.
- data
بايتات القيمة الجديدة.
- send_update
إذا كانت
True، تُرسل أيضاً إشعاراً/إشارة إلى كل اتصال مشترك.
- notify(connection: DeviceConnection, data: bytes | None = None) None¶
إرسال GATT Notify إلى connection.
- connection
اتصال العميل المستهدف.
- data
الحمولة المراد إرسالها. إذا كانت
None، تُرسل القيمة المحلية الحالية.
- indicate(connection: DeviceConnection, data: bytes | None = None, timeout_ms: int = 1000) Awaitable[None]¶
غير متزامنة. ترسل GATT Indicate إلى connection وتنتظر تأكيد العميل. تطلق
GattErrorعند حالة غير صفرية.- connection
اتصال العميل المستهدف.
- data
الحمولة المراد الإشارة إليها، أو
Noneلإرسال القيمة المحلية.- timeout_ms
الحد الأقصى لزمن انتظار التأكيد.
- written(timeout_ms: int | None = None) Awaitable[DeviceConnection | tuple[DeviceConnection, bytes]]¶
غير متزامنة. تنتظر عملية كتابة بعيدة. تُرجع
DeviceConnectionالكاتب، أو(connection, data)إذا أُنشئت الخاصية بـcapture=True.- timeout_ms
الحد الأقصى لزمن الانتظار. القيمة
Noneتنتظر إلى الأبد.
- on_read(connection: DeviceConnection) int¶
خطّاف تجاوز (override) يُستدعى تزامنياً عند استقبال قراءة بعيدة. أرجع
0للسماح بالقراءة أو رمز خطأ ATT غير صفري لرفضها. التنفيذ الافتراضي يُرجع0.
- class aioble.BufferedCharacteristic(service: Service, uuid: bluetooth.UUID, max_len: int = 20, append: bool = False, **kwargs)¶
خاصية
Characteristicيمكن إعداد مخزن GATT الداعم لها. مفيدة لاستقبال قيم أكبر من حجم السمة الافتراضي، أو لوضع عمليات الكتابة المتتالية في طابور.- max_len
حجم المخزن بالبايتات.
- append
إذا كانت
True، تُلحق عمليات الكتابة المتتالية في المخزن بدلاً من الكتابة فوقه.
تُمرَّر الوسائط الأخرى إلى
Characteristic.
- class aioble.Descriptor(characteristic: Characteristic, uuid: bluetooth.UUID, read: bool = False, write: bool = False, initial: bytes | None = None)¶
واصف GATT محلي. يؤدي إنشاء واحد تلقائياً إلى إلحاقه بـ characteristic. يرث
readوwriteوwrittenمنCharacteristic.- characteristic
كائن
Characteristicالمالك.- uuid
معرّف UUID للواصف.
- read, write
قيم منطقية (Booleans) تختار عمليات GATT المدعومة.
- initial
قيمة أولية اختيارية (
bytes).
- class aioble.ClientService¶
خدمة GATT بعيدة اكتُشفت على نظير. تُرجَع بواسطة
DeviceConnection.service()أو يُكرَّر عليها منDeviceConnection.services().لا تنشئه مباشرة.
- connection¶
كائن
DeviceConnectionالمالك.
- uuid¶
معرّف UUID للخدمة البعيدة.
- characteristic(uuid: bluetooth.UUID, timeout_ms: int = 2000) Awaitable[ClientCharacteristic | None]¶
غير متزامنة. تكتشف خاصية وحيدة بواسطة UUID، أو
Noneإذا لم تُعثر عليها.
- characteristics(uuid: bluetooth.UUID | None = None, timeout_ms: int = 2000) ClientDiscover¶
يُرجع مُكرِّراً غير متزامن من كائنات
ClientCharacteristic. استخدمه معasync forوشغّل الحلقة حتى اكتمالها.- uuid
مرشّح UUID اختياري.
- timeout_ms
مهلة لكل عملية اكتشاف.
- class aioble.ClientCharacteristic¶
خاصية GATT بعيدة اكتُشفت على نظير. تُرجَع بواسطة
ClientService.characteristic()أو يُكرَّر عليها منClientService.characteristics().لا تنشئه مباشرة.
- service¶
كائن
ClientServiceالمالك.
- uuid¶
معرّف UUID للخاصية.
- properties¶
قناع بِتّي (bitmask) لعمليات GATT المدعومة كما أبلغ عنها النظير.
- read(timeout_ms: int = 1000) Awaitable[bytes]¶
غير متزامنة. تُصدر GATT Read وتُرجع القيمة. تطلق
GattErrorعند حالة غير صفرية.- timeout_ms
مهلة القراءة.
- write(data: bytes, response: bool | None = None, timeout_ms: int = 1000) Awaitable[None]¶
غير متزامنة. تُصدر GATT Write.
- data
القيمة المراد كتابتها.
- response
Trueلاشتراط استجابة-كتابة (وإطلاقGattErrorعند الفشل).Falseللكتابة-بدون-استجابة.None(الافتراضية) تختار تلقائياً بناءً على ما يُعلنه النظير.- timeout_ms
مهلة الكتابة (ذات صلة فقط إذا كانت response تساوي
True).
- notified(timeout_ms: int | None = None) Awaitable[bytes]¶
غير متزامنة. تنتظر الإشعار التالي على هذه الخاصية وتُرجع حمولته. تُرجع فوراً إذا كان هناك إشعار في الطابور بالفعل.
- timeout_ms
الحد الأقصى لزمن الانتظار. القيمة
Noneتنتظر إلى الأبد.
- indicated(timeout_ms: int | None = None) Awaitable[bytes]¶
غير متزامنة. تنتظر الإشارة التالية على هذه الخاصية وتُرجع حمولتها.
- timeout_ms
الحد الأقصى لزمن الانتظار.
- subscribe(notify: bool = True, indicate: bool = False) Awaitable[None]¶
غير متزامنة. تكتب واصف إعداد خاصية العميل (CCCD) للاشتراك (أو إلغاء الاشتراك) في الإشعارات و/أو الإشارات.
- notify
تمكين الإشعارات.
- indicate
تمكين الإشارات.
- descriptor(uuid: bluetooth.UUID, timeout_ms: int = 2000) Awaitable[ClientDescriptor | None]¶
غير متزامنة. تكتشف واصفاً وحيداً بواسطة UUID، أو
Noneإذا لم تُعثر عليه.
- descriptors(timeout_ms: int = 2000) ClientDiscover¶
يُرجع مُكرِّراً غير متزامن من كائنات
ClientDescriptor. استخدمه معasync forوشغّل الحلقة حتى اكتمالها.
- class aioble.ClientDescriptor¶
واصف GATT بعيد اكتُشف على نظير. يرث
readوwriteمنClientCharacteristic.لا تنشئه مباشرة.
- characteristic¶
كائن
ClientCharacteristicالمالك.
- uuid¶
معرّف UUID للواصف.
- class aioble.L2CAPChannel¶
قناة L2CAP نشطة موجهة للاتصال. تُرجَع بواسطة
DeviceConnection.l2cap_accept()أوDeviceConnection.l2cap_connect(). تدعم الاستخدام كمدير سياقasync withيقطع الاتصال تلقائياً عند الخروج.لا تنشئه مباشرة.
- our_mtu¶
الحد الأقصى للحجم بالبايتات الذي يمكن للنظير إرساله إلينا في وحدة SDU واحدة.
- peer_mtu¶
الحد الأقصى للحجم بالبايتات الذي يمكننا إرساله إلى النظير في وحدة SDU واحدة.
- available() bool¶
تُرجع تزامنياً
Trueإذا كانت بيانات الاستقبال المخزنة جاهزة (أي أنrecvintoلن تتوقف للانتظار).
- recvinto(buf: bytearray, timeout_ms: int | None = None) Awaitable[int]¶
غير متزامنة. تستقبل في buf، وتُرجع عدد البايتات المقروءة. تنتظر بيانات جديدة إذا كانت القناة فارغة.
- buf
مخزن مؤقت مخصص مسبقاً لملئه.
- timeout_ms
الحد الأقصى لزمن الانتظار. القيمة
Noneتنتظر إلى الأبد.
- send(buf: bytes, timeout_ms: int | None = None, chunk_size: int | None = None) Awaitable[None]¶
غير متزامنة. ترسل buf على القناة، مع تجزئة الحمولات الأكبر إلى أجزاء بحجم MTU. تنتظر أرصدة التحكم في التدفق حسب الحاجة.
- buf
كائن شبيه بالبايتات للإرسال.
- timeout_ms
الحد الأقصى لزمن الانتظار لكل جزء.
- chunk_size
تجاوز اختياري لحجم الجزء لكل استدعاء. مقيّد بـ
min(our_mtu * 2, peer_mtu).
- flush(timeout_ms: int | None = None) Awaitable[None]¶
غير متزامنة. تنتظر حتى يفرّغ المتحكم أي
sendمتوقف.- timeout_ms
الحد الأقصى لزمن الانتظار.