mwsepeer Güncelle
parent
a11db588d4
commit
c59443166a
106
mwsepeer.md
106
mwsepeer.md
|
|
@ -1 +1,105 @@
|
|||
# MWSE Peer sistemi
|
||||
# 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
|
||||
Loading…
Reference in New Issue