Pickup Protocol 3.0: delivery-request, delivery, messages-received
Aracılık mesajları bir kuyruğa sokar. Pickup, onların nasıl çıktığıdır. Bir ajanın uyandığında "ben yokken bir şey geldi mi?" diye sorarken konuştuğu protokoldür.
Neden düpedüz göndermek yerine bir protokol
Aracı, çevrimdışı bir ajana itemediği için (aracının var olmasının bütün sebebi budur) ajanın çekmesi gerekir. Ve bir çekme yarıda başarısız olabildiği için, protokolün bir teslim aldı adımına ihtiyacı vardır. Böyle bir adım olmadan aracı ya hiç başarıyla teslim etmediği mesajları siler ya da onları sonsuza kadar tutar.
Pickup 3.0, tam olarak bunu çözen üç mesajdır.
1 · delivery-request, "benim için neyin var?"
Ajan, aracıdan kuyruktaki mesajları ister, isteğe bağlı olarak bir yığın boyutuyla sınırlandırarak. Aracı, o ajanın anahtar listesindeki alıcı anahtarları için elinde ne varsa onunla yanıt verir.
Yığın boyutu göz ardı edilecek bir varsayılan değil, gerçek bir karardır. Küçük yığınlar daha fazla gidiş geliş demektir; büyük olanlar, bağlantı aktarımın ortasında koparsa daha büyük bir arıza birimi demektir.
2 · delivery, aracı onları teslim eder
Aracı kuyruktaki zarfları ek olarak döndürür. Her biri hâlâ özgün gönderen ile sizin aranızda uçtan uca şifrelidir: aracı, hiç açmadığı şifreli metni, aldığı hâliyle teslim ediyordur.
Bu anda mesajlar iki yerde birden bulunur: ajanın elindedir ve aracının elinde de hâlâ vardır. O yedeklilik kasıtlıdır ve 3. adım onu çözen şeydir.
3 · messages-received, gerçekten silen teslim aldı bildirimi
Ajan, hangi mesaj kimliklerini başarıyla aldığını teyit eder. Ancak o zaman aracı onları düşürür.
Bu, insanların atladığı adımdır ve atlamanın bir gürültülü, bir de sessiz belirtisi vardır:
- Gürültülü: her alımda aynı mesajlar tekrar tekrar, sonsuza kadar teslim edilir.
- Sessiz: kuyruk sınırsız büyür ve sonunda aracının uyguladığı limite çarpar; bkz. kuyruk derinliği ve geri basınç.
Mesajı yalnızca aldığınızda değil, kalıcı olarak sakladıktan sonra teslim aldı bildirimi gönderin. Alır almaz bildirip sonra kalıcılaştırmadan çökmek, bir mesajın kalıcı olarak kaybedilme yoludur: aracı kendi kopyasını çoktan silmiştir, hem de doğru olarak, çünkü siz aldığınızı söylediniz.
Alışveriş, sırasıyla
agent --delivery-request--> mediator (optional batch limit)
agent <--delivery------------ mediator (queued envelopes, still encrypted)
...agent decrypts and DURABLY STORES...
agent --messages-received--> mediator (the ids it actually kept)
...mediator deletes exactly those...
Uç noktanın canlı olduğunu kontrol etmek
Pickup, diğer her şeyle aynı DIDComm uç noktası üzerinden çalışır ve bir şey yapmadan önce girdiyi doğrular:
curl -s -o /dev/null -w '%{http_code}\n' -X POST https://relay.solidus.network/didcomm
# 400
Boş bir gövdeye doğru cevap 400'dür: rotanın var olduğunu ve ayrıştırdığını kanıtlar. Bir 404,
yanlış yolda olduğunuz anlamına gelir. Bu, entegrasyondaki en ucuz duman testidir.
Canlı teslimat, zaten bağlıyken
Bir ajan bağlıysa ve mesajların yoklanmak yerine geldikçe itilmesini istiyorsa, Pickup 3.0 canlı mod teslimatını da kapsar. Bu, farklı bir model değil aynı modelin üzerinde bir iyileştirmedir: silmeyi yine teslim aldı bildirimi yönetir.
Bu, aracıya sizin hakkınızda ne söyler
Her alım bir sinyaldir: bu ajan şu anda, bu adresten çevrimiçi ve bu kadar mesajı bekliyordu. Alım zamanlaması, bir aracının gördüğü en açık üstveri izlerinden biridir ve etkinlik takviminizin iyi bir yaklaşık değeridir.
Bunun hiçbiri protokol katmanında düzeltilebilir değildir ve bir aracının görebildikleri ve göremedikleri sayfasında dürüstçe sayılmıştır. Tehdit modeliniz ne gönderdiğinizden çok ne zaman çevrimiçi olduğunuzu önemsiyorsa, bundan önce onu okuyun.
İşletmeci tarafındaki görünüm
Bir işletmeci teslimatları ve teslim aldı bildirimlerini olay olarak görür: sayılar, zamanlamalar, sonuçlar; asla mesaj içerikleri değil. Bunun gövdeler okunmadan nasıl açığa çıkarıldığı web kancaları ve teslimat günlükleri sayfasındadır.
relay.solidus.network adresindeki işletmeci konsolu örnek veri gösterir ve bunu sayfada söyler.
Orada gördüğünüz her kuyruk ya da teslimat rakamı açıklayıcıdır. Onu bizim ya da bir başkasının
ölçütü olarak göstermeyin.