SendPort
- Dart kursu
- İleri seviye
- Ders 3/83
- 5 dk
SendPort ve ReceivePort ile iletişim öğrenirsin.
SendPort ve ReceivePort
ReceivePort, mesaj almak için açılan kanaldır. SendPort, o kanala mesaj göndermek için kullanılan üç noktadır. receivePort.sendPort ile elde edilir.
Tipik akış: ana isolate bir ReceivePort açar, sendPort'unu spawn'a aktarır. Yeni isolate işini bitirince sendPort.send(sonuç) ile yanıt gönderir.
ReceivePort bir Stream'dir; await for ile ya da .first ile ilk mesaj beklenir. İş bitince close() ile kapatılır.
İki yönlü haberleşme
İki isolate arasında çift yönlü haberleşme için her iki taraf da birer ReceivePort açar ve sendPort'unu karşıya gönderir. Böylece her taraf diğerine mesaj gönderebilir.
Mesajlar sırayla işlenir; aynı port'a aynı anda yalnızca bir mesaj alınır. Bu yüzden ek senkronizasyon gerekmez.
Büyük nesneler kopyalanır; bu yüzden çok büyük veriler için TransferableTypedData kullanmak verimlidir (sıfır kopya aktarım).
Uygulama ReceivePort ile mesaj bekle
main'i async yap. var port = ReceivePort(); ile port aç. Aynı port'a port.sendPort.send('merhaba isolate') ile mesaj gönder. var msg = await port.first; ile ilk mesajı bekle ve print(msg); ile yazdır.
Başlangıç kodu
void main() {
// async yap; ReceivePort aç; sendPort.send ile mesaj gönder; ilk mesajı bekle
}Örnek çözüm
import 'dart:isolate';
void main() async {
var port = ReceivePort();
port.sendPort.send('merhaba isolate');
var msg = await port.first;
print(msg);
}Beklenen çıktı
merhaba isolate
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Port kavramlarını eşleştir
| Kavram | Anlamı |
|---|---|
ReceivePort |
Mesaj alma kanalı |
SendPort |
Mesaj gönderme ucu |
.sendPort |
SendPort erişimi |
.first |
İlk mesaj |
2 ReceivePort hangi arayüzü uygular?
- Future
- Iterable
- Stream Doğru cevap
- Isolate
Açıklama: ReceivePort bir Stream'dir, mesajları akış olarak verir.
3 Mesaj gönderme
sendPort.____('merhaba');
sendPort.send('merhaba');
Açıklama: SendPort.send ile mesaj gönderilir.