İlk istemci
Tarayıcıdan Lily v2 bağlantısı açın, ilk event’i gönderin ve ACK kimliğini izleyin.
İlk sunucuyu çalıştırdıktan sonra tarayıcı bağlantısını kurabilirsiniz. Sunucunun beklediği adres, namespace, subprotocol ve envelope birbirini tamamlar.
Tarayıcıdan bağlanın#
http://localhost:3000 adresindeki bir sayfanın konsolunda aşağıdaki kodu çalıştırın. Bu dokümantasyonun yerel önizlemesi aynı adreste çalışıyorsa onu kullanabilirsiniz; başka bir Origin kullanıyorsanız sunucudaki allowed_origins değerini de değiştirin.
const socket = new WebSocket(
"ws://127.0.0.1:8081/ws?namespace=hello",
"lily.v2",
);
socket.addEventListener("message", ({ data }) => {
console.log(JSON.parse(data));
});
socket.addEventListener("close", ({ code, reason }) => {
console.log("Bağlantı kapandı", code, reason);
});
socket.addEventListener("open", () => {
socket.send(JSON.stringify({
protocol_version: 2,
msg_type: "event",
event: "hello:greet",
content_kind: "json",
content_type: "application/json",
encoding: "identity",
data: { name: "Ada" },
namespace: "hello",
timestamp: Date.now(),
}));
});
// Bağlantı OPEN olduktan sonra çalıştırılır:
function requestConfirmation() {
const ackId = crypto.randomUUID();
socket.send(JSON.stringify({
protocol_version: 2,
msg_type: "event",
event: "hello:confirm",
content_kind: "json",
content_type: "application/json",
encoding: "identity",
data: { name: "Ada" },
ack_id: ackId,
timestamp: Date.now(),
}));
return ackId;
}İstemci dosyasını indirin. open olayı ilk gönderimi başlatır; requestConfirmation() fonksiyonunu bağlantı açıldıktan sonra çağırın. CONNECTING durumunda send kullanmayın.
Yanıtı okuyun#
İlk mesajın yanıtında msg_type değeri event, event değeri hello:greeted, data değeri Merhaba, Ada! olur. requestConfirmation() ile gelen yanıtın msg_type değeri ack ve ack_id değeri fonksiyonun döndürdüğü ID ile aynıdır.
Bu küçük örnek yanıtları konsola yazar. Bir uygulama istemcisinde pending request tablosu, zaman aşımı, hata eşlemesi ve bağlantı kapanınca bekleyen isteklerin sonlandırılması gerekir. Reconnect sonrasında işlemi tekrar göndermeden önce işlemin idempotency sözleşmesini belirleyin. Rust client request/ACK eşlemesini hazır sağlar.
Namespace ve zaman#
Namespace bağlantı başında ?namespace=hello ile seçilir. Event yine tam hello:greet adını taşır. İsteğe bağlı envelope namespace alanı varsa bağlantıyla uyuşmalıdır; bir sonraki mesajda başka namespace'e geçemezsiniz.
timestamp, istemcinin gönderdiği mesaj metadata'sıdır. Sunucunun monotonic işlem deadline'ı değildir ve güvenilir bir saat kanıtı sayılmaz. Envelope referansı text ve binary içerik türlerini de açıklar.
CLI ve servis istemcileri#
Origin göndermeyen istemciler için policy'yi açıkça değiştirin:
use lilyrs::websocket::ServerConfig;
let policy = ServerConfig {
allow_missing_origin: true,
require_subprotocol: true,
..ServerConfig::default()
};Bu seçenek mevcut ama izin verilmeyen Origin'i kabul etmez. Tarayıcının WebSocket constructor'ı URL ve subprotocol listesi alır; keyfi Authorization header seçeneği yoktur. Header ile authentication örneği servis/CLI içindir. Tarayıcıda cookie/session yaklaşımını izleyin. Bu ayrım WebSocket standardındaki arayüze dayanır.
Bu sayfanın kaynakları v0.1.0
Anlatım, incelenen framework commit’ine dayanır.