Merhaba,
SvelteKit'e WebSocket desteği eklenmesiyle ilgili GitHub'daki #1491 numaralı issue üzerinde yapılan tartışmaları inceledim., WebSocket desteğinin SvelteKit'e entegre edilmesi ve farklı platformlarda nasıl kullanılabileceği konuları konuşulmuş.
Özellikle, sunucu tarafında +server.ts dosyasında socket nesnesinin nasıl tanımlanacağı ve istemci tarafında WebSocket bağlantısının nasıl kurulacağı konusunda örnekler paylaşılmış. Ayrıca, farklı platformlar (Node.js, Cloudflare, AWS Lambda vb.) için uygun adaptörlerin nasıl yükleneceği ve kullanılacağına dair bilgiler de mevcut.
https://github.com/sveltejs/kit/issues/1491
Deneyip test etmek isteyenler, svelte-kit ve adapter versiyonlarını PR'daki ile değiştirmelidir.
sveltekit
npm i https://pkg.pr.new/sveltejs/kit/@sveltejs/kit@98c2021
node
npm i https://pkg.pr.new/sveltejs/kit/@sveltejs/adapter-node@98c2021
cloudflare
npm i https://pkg.pr.new/sveltejs/kit/@sveltejs/adapter-cloudflare@98c2021
cloudflare workers
npm i https://pkg.pr.new/sveltejs/kit/@sveltejs/adapter-cloudflare-workers@98c2021
Bununla birlikte '@svelte/kit' Socket tipini export ediyor. sunucu tarafında +server.ts dosyalarinda socket objesi export ederek websocket handlerı oluşturulabilir.
/routes/socket/+server.ts
import { type Socket } from '@sveltejs/kit';
export const socket: Socket = {
// protokolu websocket ile değiştirme
upgrade(req) {
console.log(`[ws] upgrading ${req.url}...`);
},
// yeni bir socket bağlandığında
open(peer) {
console.log(`[ws] open: ${peer}`);
},
// yeni bir mesaj alındığında
message(peer, message) {
console.log('[ws] message', JSON.parse(message.data));
},
// socket bağlantısı kesildiğinde
close(peer, event) {
console.log('[ws] close', peer, event);
},
// hata olduğunda.
error(peer, error) {
console.log('[ws] error', peer, error);
}
};
client tarafında ise
<script>
const s = new WebSocket("ws://localhost:5173/socket");
s.onopen = function () {
console.log("Connection opened.");
s.send(JSON.stringify({ test: "test"}))
}
</script>
edit: dökümantasyonda herhangi bir güncelleme yok, konunun yakindan takipçisiyim. kararlı sürüme eklenmesi ne kadar vakit alır bilmiyorum. deneysel birşey olduğunu söylememe gerek yok herhalde