CodeBlanks Logo Icon CodeBlanks

SendPort

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

main.dart
void main() {
  // async yap; ReceivePort aç; sendPort.send ile mesaj gönder; ilk mesajı bekle
}

Örnek çözüm

main.dart
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

Soru
sendPort.____('merhaba');
Cevap
sendPort.send('merhaba');

Açıklama: SendPort.send ile mesaj gönderilir.

İleri seviye bölümündeki tüm dersler