mwsepeer Güncelle

saqut 2025-12-07 03:36:17 +03:00
parent a11db588d4
commit c59443166a
1 changed files with 105 additions and 1 deletions

@ -1 +1,105 @@
# MWSE Peer sistemi
MWSE sunucularında Websocket bağlantısı açan tüm clientler birer peer olarak tanımlanır. Bir client birden fazla kez sunucuya bağlanabileceği için birden fazla peer tek bir cihazda fazlı peerleri tanımlıyor olabilir
Hem kendi peer özniteliğinize ulaşmak için hemde diğer peerlere ulaşmak için aynı apiyi kullanabilirsiniz
Kendiniz 'me' anahtar sözcüğüyle alabilirsiniz.
Herkesin sunucu tarafında oluşturulan tekil kodları socketId olarak saklanır
```ts
mwse.scope(()=>{
let selfpeer = mwse.peer('me');
selfpeer.socketId // --> Örnek "fa9b039e-29bf-4861-8bee-54c2c64ded19"
})
```
Arkaplanda tüm peerler birbirleriyle bu IDler ile haberleşmelerine rağmen MWSE soyutlama katmanları ekler
## Peerlar arası iletişim
let otherPeer = mwse.peer('fa9b039e-29bf-4861-8bee-54c2c64ded19');
// Mesaj göndermek için son derece basit olan peer.send komutunu kullanabilirsiniz. Bu JSON'a çevrilebilecek tüm verileri orjinal formunda iletir
```js
otherPeer.send("Hi '");
```
orherPeerden gelen mesajları dinlemek için message eventini dinlemeniz gerekir.
Bu peer.on('message') eventi YALNIZCA otherPeer tarafından size direkt gönderilen mesajları içerir.
Bir oda içerisinden gönderilen mesaj burayı tetiklemez.
```js
otherPeer.on('message', data => {
console.log(data) // --> Örneğin "Hi !"
// otherPeerden gelen mesaj "data"
})
```
## Peerlerin birbirlerini doğrulaması
Temelde iki peer birbirlerine herhangi bir mesaj ilettiklerinde yada pair oldukları andan itibaren birbirlerini izlerler. Eğer iki tarafdan birisi sunucudan kopar ise diğer tarafda disconnect eventi tetiklenir
```js
otherPeer.on('disconnect', () => {
// otherPeer şuanda offline veya sokette yok
})
// Ayrıca bir event bağlamadanda online olup olmadığını sorgulayabilirsiniz
// Bu metot true ise peer halen içeridedir eğer false dönüyorsa kopmuştur
await otherPeer.isReachable()
```
## Peerler arasında kanal oluşturma
MWSE peerler arasında tünelleme kurar ve böylece arada bir sunucu olduğunu developerlara unutturmayı hedefler. Buradaki amaç iki peer arasındaki iletişimi request/response şeklinde kurabilmektir.
Bunun faydası bir peer diğer peerden veri almak istediğinde veya peerler birbirlerini veri kaynağı olarak kullanacakları sırada istenen veriler ile cevap verilen verilerin birbirlerine karışmasını önlemektir
```
Peer1 -----Question1-----> Peer2
Peer1 -----Question2-----> Peer2
Peer1 <-----Answer2------- Peer2
Peer1 <-----Answer1------- Peer2
```
#### Çalışma şekli
Peer2
```js
peer1.on('request', request => {
// request.body // -----> peer1 tarafında gönderilen veri
// request.peer // -----> Hangi peerin gönderdiği
// request.response(5) -> Talebe verilecek cevap
if(request.body.type == "addition")
{
// addition verisi geldiğinde number1 ve number2nin toplamını cevap olarak gönderecek bir düzenek kuruyoruz
request.response(
request.body.number1 + request.body.number2
)
}
})
```
Peer1 tarafında Peer2'nin işleyeceği veri gönderilir ve peer2nin bu mesaja cevap vermesi beklenir
```js
let answer = await peer2.request({
type: "addition",
number1: 1,
number2: 5
});
// Peer2den istenen veri, peer2 tarafında işlenip response olarak döndüğünde sunucu bunu anında iletir ve kod bu noktadan akmaya devam eder burdaki answer değeri response içeridir
console.log(answer) // --> 6
```
Burdaki developerin çözmesi gereken sorunlardan birisi eğer peer2 requeste cevap veremezse algoritmanın Promise'yi hiç bir zaman resolve etmeyeceğidir. Bu durumda peer2 requesti gittiğinde eğer peer2 soketten düşerse algoritma sonsuza kadar bekleyecektir