Envelope ve routing
Lily v2 zarfının route, içerik türü, encoding ve ACK alanlarını doğru eşleştirin.
Varsayılan LilyEnvelopeCodec, uygulama mesajını bir JSON envelope içinde taşır. WebSocket Text veya Binary frame kullanmanız, bu zarfı atlayabileceğiniz anlamına gelmez.
Event zarfı#
{
"protocol_version": 2,
"msg_type": "event",
"event": "hello:greet",
"content_kind": "json",
"content_type": "application/json",
"encoding": "identity",
"data": { "name": "Ada" },
"namespace": "hello",
"timestamp": 0
}Event tam namespace:action adını taşır. Bağlantı namespace'iyle uyuşur; case-sensitive exact route lookup yapılır. Lookup, mesaj DI scope'u ve kullanıcı hook'larından önce gerçekleşir. Bilinmeyen action, guard'ın içine düşen bir iş mesajı gibi değerlendirilmez.
İçerik türleri#
content_kind |
content_type |
encoding |
data |
|---|---|---|---|
json |
application/json |
identity |
JSON değer |
text |
text/plain; charset=utf-8 |
identity |
String |
binary |
application/octet-stream |
base64 |
Base64 string |
Örneğin AAEC base64 verisi [0, 1, 2] byte'larını temsil eder. Typed binary event için:
{
"protocol_version": 2,
"msg_type": "event",
"event": "techniques:binary",
"content_kind": "binary",
"content_type": "application/octet-stream",
"encoding": "base64",
"data": "AAEC",
"ack_id": "binary-1"
}Bu mesaj extractor örneğindeki binary action'a gider. Raw dosya byte'larını WebSocket Binary frame'e koymak varsayılan Lily v2 için geçerli envelope değildir. send_binary taşıyıcı frame'i, BinaryPayload ise uygulama içeriğinin türünü seçer.
İsteğe bağlı alanlar#
namespace verilirse route ile uyuşmalıdır. timestamp verilmezse 0'dır; negatif olamaz. ack_id, yanıtın ilişkilendirilmesini sağlar ve en fazla 128 byte'tır. Mesaj kimliği de 128 byte sınırındadır. Envelope metadata alanı en fazla 32 string çifti; anahtar 128, değer 1024 byte taşır.
MessageHeaders bu envelope metadata'sını okur; HTTP Upgrade header'larını okumaz. Kimlik veya oda yetkisini istemcinin bu alanlara yazdığı metinden üretmeyin. Bilinmeyen envelope alanları reddedilir; şema dışında keyfi alan eklemek yerine kendi DTO'nuzun data içeriğini kullanın.
Gelen ve giden mesaj ayrımı#
Codec ACK zarfını decode edebilir; server dispatch yalnızca inbound event kabul eder. İstemcinin sunucuya msg_type: "ack" göndererek normal action çağırması desteklenmez. Server'ın ACK yetkisi gelen event'in ack_id alanından gelir.
Hatalı zarf, namespace uyuşmazlığı, bilinmeyen route ve domain rejection farklı sınırlardır. Hata sayfası public sonuçlarını, outcome sayfası başarılı çıkışlarını açıklar. Frame/message byte limitleri backpressure ve referansta bulunur.
Bu sayfanın kaynakları v0.1.0
Anlatım, incelenen framework commit’ine dayanır.