Laravel Türkiye Discord Kanalı Forumda kod paylaşılırken dikkat edilmesi gerekenler!Birlikte proje geliştirmek ister misiniz?
Sorum sade ve net. Websocket'i pusher,pubnub,firebase gibi herhangi üçüncü bir servis kullanmadan nasıl ve ne şekilde yaparım.
Çalışma mantıkları nasıldır. Ben pusher gibi bir servis yazacak olsam ya da pusher'ın yaptığını bu servislere bağımlı kalmadan nasıl gerçekleştirebilrim. Kısaca eş zamanlı olarak sohbeti ele aldığımızda ajax,vuex kullanmadan sadece socket ile nasıl gerçekleşitirebiliriz.

Aynı şeyi farklı yollarla sormuş bulundum. Benim için önemli bir konu. Enimm bu şekilde daha hakim ve daha esnek proeler çıkabilecektir.


Laravel Echo'nun yaptığı işlem tam olarak nedir. Bütün olarak ele alındığında bu eşzamanlılık nasıl sağlanıyor. Çünkü
pusher php, pusher js ekleniyior.
Laravel echosuz geçrekleşmiyor ya da

redis php, socket.io js aynı şekilde alternatif.
Pusher'ı bilmem ama socket.io ile fazlasıyla haşır neşir olduğum için anlatayım.
Normal http protokolü tek yönlü iletişim sağlar ve işlem bittiğinde bağlantı kapatılır. Yani tarayıcı (client) sunucuya bir istek yapar, sunucu da isteğe yanıt verir ve sunucunun görevi biter. Bu andan itibaren sunucunun kendi isteğiyle bu client'a bir şey gönderme şansı yoktur. Ancak client'ın yeniden bir istek yapması gerekir.

Websocket protokolünde bilgi alışverişi çift yönlüdür. Yani sunucu da herhangi bir istek gelmese bile isterse bu tarayıcıya bir şeyler gönderebilir. Bunun için tarayıcının ilgili sunucuyu dinlemesi gerekir. Socket.io da bu websocket protokolünü kullanarak client ve server arasında bir bağlantı kurmak için kullanılan bir javascript kütüphanesidir. Yani socket.io olmadan vanilla JS ile de bu işlemleri yapabilirsiniz. Jquery gibi düşünebilirsiniz. İşlerinizi kolaylaştırıyor.

Redis ise tam olarak websocket ile alakalı değildir. Redis i uygulamalar arası haberleşme için kullanıyorum ben. Yani sunucudan sunucuya bilgi alışverişi diyebiliriz. Bir php uygulaması ile bir nodeJS uygulamasının birbirinden haberdar olması için redis i kullanabiliriz. Socket.io bir nodejs paketi olduğu için mantık şöyledir; php den socket e veri aktarmak için önce veriyi redis e göndermek gerekir, nodejs uygulamasından da redis i dinleyip ilgili mesajı socket ile client'a aktarmak gerekir.

Doğrudan php'den websocket bağlantısı ile de client'a data gönderilebilir tabii ki arada nodejs olmasına gerek yok. Socket.io için gerekli.

Mantık bu şekilde, kullanımı ise uzun bir konu. Orası artık size kalmış
Push Notification için Google ve Firefox web tarayıcı bağımlılığı var. Bu tarayıcı firmalarının servisleri olmadan yapılamıyor. Ben öyle biliyorum.
Öncelikle cevap için teşekkür ederim ama ne yazık ki pek yardımcı olmadı çünkü bunlar websocket'in tanıtımında hali hazırda yer alan bilgiler. Network ile ilgili. Redis'i event gibi düşünüyoruz sanırım doğru mu ? Çağrıldığında tetikleniyor.Farkı nedir.

Pusher için php kütüphanesi ve js dışında hem api bilgileri için gerekli hem de ek şeyler vardır redisin de yaptığı. .

Benim asıl öğrenmek istediğim teknik ya da doğrudan kaynağa bir yönlendirme olabilir.

Pusher'sız eşzamanlılığı sağlamak. Normalde http client diyorsunuz. Doğrudan websocket le birlikte yazabilmek için nasıl yaklaşmak gerkeiyor. Ajax veya get post işlemlerini kullanıyoruz normalde.
Php de redisi socket.io unutursak.
Bunlar olmadan eş zamanlılığı nasıl sağlayacağız.
Elimizde kalan php ve js ile örneklere ihtiyacım var. Yazması sorun değil araştırabilirim ama bu konuda elimde pek malzeme ön bilgi mevcut değil.

Teknik kısmını merak ediyorum benim ilgimi teorik hiç çekmiyor. Çünkü her zaman teorikle haşır neşir oluyoruz.
Önce Firebase den API kimlik bilginizi alın. Detaylar aşağıdaki adreslerde var.

Cloud Messaging
https://developers.google.com/cloud-messaging/
API
https://developers.google.com/web/ilt/pwa/introduction-to-push-notifications

Burada anlatılmış.
https://firebase.google.com/docs/cloud-messaging/js/client
Esas tetikleyici yani anlık iletişim kuran fonksiyon
const messaging = firebase.messaging();

Bildirimleri iletmek için PHP veya başka bir dille aşağıdaki adrese iletiyorsunuz. İletilen bilgi sizin kimlik bilginizle birlikte web tarayıcıya iletiliyor. Kimlik bilginize göre izin verilen bildirim kodu devreye giriyor.
https://fcm.googleapis.com/fcm/send

Mesaj iletimi için aşağıdaki adreste gerekli örnek ve PHP kodu var.
https://gist.github.com/MohammadaliMirhamed/7384b741a5c979eb13633dc6ea1269ce
Neden hep yanlış anlaşılıyorum ? Konunun ismi firebase'i nasıl kullanabilirim değil ki.
Son yorum için söylüyorum bir tane bile cevap içermiyor soruya.

Yabancı yerlerde sorduğumda teknik cevaplar geliyor hiçbirşekilde türkçe tatmin edici cevap bulamıyorum. Geliştiricilerin kalitesinden muhtemelen. İki yorumda alakasız geldi. Bunları zaten ben yıllardır biliyorum ve kullanıyorum.
elementaryos yazdı Sorum sade ve net. Websocket'i pusher,pubnub,firebase gibi herhangi üçüncü bir servis kullanmadan nasıl ve ne şekilde yaparım.
Çalışma mantıkları nasıldır.
---
redis php, socket.io js aynı şekilde alternatif.
---------------------------------------------------------------------------------------------------------------
Neden hep yanlış anlaşılıyorum ? Konunun ismi firebase'i nasıl kullanabilirim değil ki.
Son yorum için söylüyorum bir tane bile cevap içermiyor soruya.

Yabancı yerlerde sorduğumda teknik cevaplar geliyor hiçbirşekilde türkçe tatmin edici cevap bulamıyorum. Geliştiricilerin kalitesinden muhtemelen. İki yorumda alakasız geldi. Bunları zaten ben yıllardır biliyorum ve kullanıyorum.
İlk konu mesajında çalışma mantıkları nasıldır demişsiniz, çalışma mantığını anlattık ben bunu biliyorum dediniz, arkadaş başka birşey anlattı, Türk geliştiriciler kalitesiz dediniz. Bozuk Türkçenizle yazdığınız mesajlarınızı anlamaya çalışarak verdiğimiz cevaplara verdiğiniz tepkiler içler acısı.

Ama yine de ana dilini bile doğru dürüst kullanamayan Türk geliştiricilerin kalitesinin artması amacıyla
elementaryos yazdı Elimizde kalan php ve js ile örneklere ihtiyacım var. Yazması sorun değil araştırabilirim ama bu konuda elimde pek malzeme ön bilgi mevcut değil.
üstteki mesajınıza istinaden burada socket io ile canlı chat örneğimi paylaşıyorum.
www.gevezekar.ga adresinde de örneğini görebileceğiniz bu yapıda php yoktur. Tamamen javascript ile çalışmaktadır, sunucu tarafında nodeJS, tarayıcı tarafında html + css + js şeklinde. Bu yapı kişilerin rastgele biri ile chat yapmasını sağlamaktadır. Bir kişi ile ancak karşılaşma durumunda konuşma açılabilir. Konuşmadan çıkılırsa bir daha karşılaşmak gerekir. Ancak bir kişi ile tekrar karşılaşılırsa eski konuşmalar da ekrana gelmektedir, çünkü tüm yazışmalar mongoDB'de tutulmaktadır. Amatör zamanlarımda yaptığım bir şeydi. Kod kalitesi düşüktür ancak çalışmaktadır.
https://github.com/alihankoc/basic-chat
Mesajınızda bahsettiğiniz gibi "sorun değil araştırabilirim" dediğiniz için daha fazla yazmıyorum.
Size hayatınızda bol şans.
@alihankoc aynen katılıyorum.

@elementaryos Websocket'i pusher,pubnub,firebase gibi herhangi üçüncü bir servis kullanmadan nasıl ve ne şekilde yaparım.
Yapmazsınız, üçüncü servislere ihtiyacınız var demiştim. Bu yüzden size cevap yazdım ve bu cevapta bolca teknik bilgi var. Bunları tek tek yazmanın bir anlamı yok.

Firebase ile aşağıdaki örneği kullandığınızda bildirim için ziyaretçiden onay istiyor. Onay verildiğinde bildirim uygulamanız hazır.
<!DOCTYPE html>
<html>
<head>
<title>Page Title</title>
 <script src="https://www.gstatic.com/firebasejs/4.6.2/firebase.js"></script>
 <script>
 // Initialize Firebase
 var config = {
 apiKey: "AIzaSyAAmUhh70rNFN4xY4xPE4xAVI4IRniuqS0",
 authDomain: "pushnotificationimpl.firebaseapp.com",
 databaseURL: "https://pushnotificationimpl.firebaseio.com",
 projectId: "pushnotificationimpl",
 storageBucket: "",
 messagingSenderId: "571091590331"
 };
 firebase.initializeApp(config);
 
 const messaging = firebase.messaging();
 messaging.requestPermission().then(function() {
 //getToken(messaging);
 return messaging.getToken();
 }).then(function(token){
 console.log(token);
 })
.catch(function(err) {
 console.log('Permission denied', err);
});


messaging.onMessage(function(payload){
console.log('onMessage: ',payload);
});
 </script>
</head>
<body>



<h1>Uygulama</h1>

</body>
</html>
Bildirimleri Firebase ye iletmek için PHP ile ileti göndermeniz gerekir. Bunun için örnek PHP kodlarını kullanabilirsiniz.
Konu sağlıklı gittiği için mutluyum. @alihankoc attığınız proje basit bir eşzamanlı sohbet uygulaması socket kullanılıyor. Ben servis kullandıktan sonra bunu yapmakta zorlanmam sorumda zaten o emit ettiğiniz socket sınıfını oluşturmak. Oluşturmak için gereksinimleri öğrenmek istiyorum. Kısaca kullanması sıkıntı değil.
Her yerde dağ kadar da döküman var. Ama o socketin kendisi gbi örnek socket2 'yi yazmak konusunda ben hiç bulamıyorum. Nereye bakmam gerekiyor.
Bu framework yazmak istiyoruma verilen framework nasıl kullanılır cevabı gibi benim gözümde.

Ben Türkiye de ki geliştiricilere hakaret için söylemiyorum. Benim gördüğüm bir tablo bu o şekilde yazmak için düşündüm ama sonra değiştirrmemeye içimden geldiği gibi göndermeye karar verdim.

@Roni ye de katkılarından dolayı teşekkür ediyorum. Fakat ben üçüncü bir servis kullanmadan yapılmıyorsa bunu pusher da yapamazdı ama kendisi bir servis. Bu native javascript ve php ile yazılabilir. Benim sorum nasıl olduğu. Kullanımı gibi şeyler değil yani.

Kısaca benim socket chat kısımlarında sıkıntım yok saatler içinde eşzamnalı sohbet uygulamasını yazabilriim hiç sıkıtnı duymam, geliştirmelerini de yapabilirim. Socket pusher farketmez ama eşzamanlılığı servis bağımsız sağlayabilecek seviye ve donanımda değilim burada da kendi seviyemi yermekte hiç çekinmem bu farkı iyi ayırt etmemi sağlıyor ayrıca. Bir hırs kazandırıyor.

Kimseyi ayıplıyor değilim ama üslubum sert ve sivridir bu da çoğunlukla antipati toplar üzgünüm.
Ama aldığım cevapların bu nedenle alakalı (!) olduğunu düşünmüyorum. Bunları yapamayanlar için değerli bilgiler tabi ki. Ben sadece benim ihtiyacımı karşılamadıkları için sitem de bulundum.

Roni beyin son kod örneğine cevabımsa ben bir dolu firebase kullanarak uygulama yazdım benim php iile veya js ile gönderme gibi bir sorunum yok. Benim amacım firebase'i aradan çıkarıp yaptığı işi onsuz sağlamak.

Umarım yeterince açıklayıcı olmuşumdur. Türkçe konusunda imlaya dem vurulmasını pek hoş bulmuyorum. Tez yazmıyoruz sonuç olarak. Misal bana bunu yönelten kişi olarak devrik cümleleriniz filan var ama bunlar tartışmaya dahil olsun istemiyorum. Noktasız bitirme, virgül kullanmama gibi bir dolu redakte edilecek yerler var cümlenizde. Ama internet burası. Anlam yönünde de öyle bozuk bir Türkçenin bile ne anlatmak istediği anlaşılabilir bunu samimi bulmam mümkün değil. Yine de ben konuların buralara gitmesiini şahsileşmesine karşıyım.

Son bir not. Benim burada sorup bazı konularda yardım istemem aleyhime kullanılmamalı bence ve ben böyle yapmıyorum. Yoksa kimse kimseye birşey sormazdı. Olay bu tür yerlere gitmesi hoş değil bu arada itham etmiyorum bunuda belirteyim.
elementaryos yazdıSorum sade ve net. Websocket'i pusher,pubnub,firebase gibi herhangi üçüncü bir servis kullanmadan nasıl ve ne şekilde yaparım.
Çalışma mantıkları nasıldır. Ben pusher gibi bir servis yazacak olsam ya da pusher'ın yaptığını bu servislere bağımlı kalmadan nasıl gerçekleştirebilrim. Kısaca eş zamanlı olarak sohbeti ele aldığımızda ajax,vuex kullanmadan sadece socket ile nasıl gerçekleşitirebiliriz.

Aynı şeyi farklı yollarla sormuş bulundum. Benim için önemli bir konu. Enimm bu şekilde daha hakim ve daha esnek proeler çıkabilecektir.


Laravel Echo'nun yaptığı işlem tam olarak nedir. Bütün olarak ele alındığında bu eşzamanlılık nasıl sağlanıyor. Çünkü
pusher php, pusher js ekleniyior.
Laravel echosuz geçrekleşmiyor ya da

redis php, socket.io js aynı şekilde alternatif.
Amacım sizi yermek değil, yanlış anlamayın ama yazmadan da edemedim. Bu mesajı okuduğumda anlaşılan ile son mesajınızı okuduğum zaman anlaşılan şey gerçekten çok farklı. İlk sorunuzdan anlaşılan SAAS teknolojisi olmadan socket işlemleri nasıl yapılır? Son yazdığınızdan anladığım socket.io vb kütüphaneler bunu nasıl yapıyor? Nasıl çalışır?
Anlattığınız kadar profesyonel bir yazılımcı iseniz(lütfen yanlış anlamayın) iki sorunuzun da cevabı çok basit.
1. Soru; Socket için SAAS servisi kullanmayacaksanız socket.io tarzı kütüphanelerle kendi socket server'ınızı kurarak çözeceksiniz. Zaten biliyorum diyorsunuz.
2. Soru; Pusher vb servisler veya socket.io nasıl çalışıyor derseniz opensource socket altyapılarını incelemeniz mantıklı olacaktır. Zaten socket.io gibi çok popüler bir örnek var, sizde kullanıyorsunuz, ben olsam onu incelerdim.
https://github.com/socketio/socket.io

Mesajlarınızda ki eleştirilen nokta noktalama işaretleri, dil bilgisi kuralları değil aslında. Sorduğunuz sorudan çıkan anlamlar belki anlatım tarzınızdan, belki bu tarz kurallara riayet edilmediğinden anlaşılamıyor yada yanlış anlaşılmalara sebebiyet veriyor. Bu tarz yanlış anlaşılmalara mahal vermemek adına, bu kurallara birazda olsa dikkat etmek gerektiğini düşünüyorum.
@elementaryos Benim amacım firebase'i aradan çıkarıp yaptığı işi onsuz sağlamak.
Sohbet uygulamaları ve mesajlaşma uygulamaları için pusher,pubnub,firebase gibi servislere ihtiyacınız yok. Nodejs,PHP vs ile Websocket kullanarak kendi servisinizi rahatlıkla yapabiliriz. Bu tür uygulamalar çok fazla olduğundan onları temel alarak yapmak zor değil. Arkadaşlar bu konuda gerekli açıklamaları yapmışlar.

Ama bildirimler için Web tarayıcı bağımlılığından dolayı firebase kullanmak gerekiyor. Firebase kütüphanesi de sonuçta Websocket mimarisine dayanıyor. Farklı bir şey değil.
Ne yazıkki üstüne pek düşemedim projelelre uğraşmaktan ama özellikle @mgsmus 'a sevgilerimi sunarım beklediğim gibi bir cevap vermiş. Ama sanırım benim kaçırdığım php'nin dışında kaldığım bir çok fonkisyonu olması yeni yeni farkediyorum.
Mantığını henüz kavrayamamış olsam da front için sanırım javascript içinde websocket sınıfını doğrudan kullanacağız ya da bunu kullanmayı sağlayan bir kütüphane yapacağız. Bu sayede iletişimi sağlamış olacak.

Gördüğüm kadarıyla ülkecek, yine istisnalar hariç genel web sistemi yazmasını biliyoruz. İş deriinleştiğinde tecrübe yada yetenek sınırlı kalıyor en azından benim yaşadığım bu baktığımda gördüğüm de bu. Bunları öğrenmek diğerlerine oranla farklı. Angular kullanmak her yerde bulunuyor ama anguları yazmak her yerde bulunmuyor. Dökümantasyonlar siteler videolar ilkini başarıyor ikincisinde farklı uğraşlar gerekiyor. Ben ikincisi için kendimde ışık görsemde bazı noktalarda halen nasıl yeteneklere dahil edilebileceğini ne şekilde nerelere bakılabileceğini bilmiyorum.
@elementaryos, ben de oturup bugün ne öğrensem diye bakmıyorum açıkçası. Bu bir arz-talep meselesi. Bir iş için lazım oluyor, o şekilde öğreniyoruz. Yoksa PHP dökümantasyonunda kullanılmayan ya da çok nadir kullanılan bir çok içsel kütüphaneyi bulabilirsiniz (Örneğin http://php.net/manual/en/book.ui.php).

Real-time için ise durum biraz farklı. Günümüzün web/yazılım teknolojisinde, hem backend hem de frontend açısından, önemli bir yeri olduğu için ayrı olarak özel ilgi gösterilmesi gerektiğini düşünüyorum. Özellikle oturup öğrenilmesi gerekiyor yani.

Senin bahsettiğin bağımlılık konusunu çok iyi anlıyorum ama mantığını bilmek şartı ile projenin ayağı kalkması için "endüstri lideri" denilebilecek çok yaygın ve güvenilir 3. parti servis ve kütüphanelerin kullanılmasından yanayım.
Node, Socket.IO, Redis, Pusher, Firebase, Algolia, Symfony bileşenleri, Doctrine vs... bunlar artık birer bağımlılıktan öte kavramlar. Bunların içine girdikçe yeni teknolojileri öğreniyorsunuz ve yeni kapılar açılıyor.

Ben şu an PHP socket kullanacak olsam Ratchet kullanırım (ama kodlarını da ne yaptığını anlayıncaya kadar didik didik eder incelerim), oturup socket_create diye server/client yazmam çünkü bu saatten sonra vanilla kod yazmayacağım için yapacağım şey büyük ihtimalle bir Ratchet klonu olacak, yani varolanı bir daha yazmam demek ki bu, öğrenmek için yapılmıyorsa, zaman kaybı demek.

O yüzden mantığını, nasıl çalıştığını öğrenin ama bilindik şeyleri kullanmaktan da çekinmeyin. PHP bilmek ayrı bir şeydir, proje geliştirmek ayrı bir şeydir. Herkes PHP biliyor ama herkes proje geliştiremiyor.

Gerçi insan PHP biliyorum derken bile çekinmeli
$x = 2;
$y = 5;
$x -=- $y +-2-+ $x;
echo $x; // 11
PHP şaşırtabilir, bende bir örnek vereyim
<?php
$uyeler = [
 [1,'ali'],
 [2, 'veli']
 ]; 
foreach($uyeler as [$id, $ad]){
 echo "$id $ad <br>";
}
Bende ratchet kullananlardanım ama kullanmakla memnunmuyum değilim tabi.Cunku nasıl çalıştığı hakkında en ufak bir fikrim yok.Zaman bulupta ne yaptığına bakabilmiş değilim.Sizin dediğiniz en güzeli, bir şeyin nasıl çalıştığını anlamak ona hakim olmaktır.Ancak bazen de gerekmeyebilir.Cunku herşeyi bilmek zorunda değilsiniz.Jquery click kullanırken gidip jquery.js dosyasına kimse bakmıyordur herhalde.
Elbette o kadar bilmeye gerek yok. Nasıl çalıştığını bilmekten kastım en basitinden kafada bir algoritma canlandırabilmek. Bu, şu porttan istek gönderiyor, o aynı portu dinliyor, aynı porttan cevap gönderiyor, isteği gönderen cevabı alıyor vs.
Ben socket fonksiyonları ile önce denemeler yaptım, 2 saat sonra çalışan bir şeyler ortaya çıkardım ama klasik socket_create gibi hep anonim fonksiyonlar olduğu için çok dağınık duruyor, o yüzden Ratchet bunu güzelce nesne tabanlıya çevirmiş ama o arka planda https://github.com/reactphp/socket bağlantı için kullanıyor.
mgsmus yazdıElbette o kadar bilmeye gerek yok. Nasıl çalıştığını bilmekten kastım en basitinden kafada bir algoritma canlandırabilmek. Bu, şu porttan istek gönderiyor, o aynı portu dinliyor, aynı porttan cevap gönderiyor, isteği gönderen cevabı alıyor vs.
Ben socket fonksiyonları ile önce denemeler yaptım, 2 saat sonra çalışan bir şeyler ortaya çıkardım ama klasik socket_create gibi hep anonim fonksiyonlar olduğu için çok dağınık duruyor, o yüzden Ratchet bunu güzelce nesne tabanlıya çevirmiş ama o arka planda https://github.com/reactphp/socket bağlantı için kullanıyor.

Üstad bizede yardım etmek için bilgin doğrultusunda bu ratchet hakkında güzel bir makale yazsan da yararlansak
Ratchet kullanmıyorum sadece socket ile uğraşırken bakmıştım ve ayrıca ben de real-time konusunda yeniyim. Sadece bir açık arttırma sitesinde kullanmıştım, onu da Node ve Socket.IO ile yapmıştım. Birisi fiyat yükseltti mi sayfaya bakan anında görüyordu vs. Araştırdığım bir konuydu, bildiğimi paylaşmak istedim.

Makale konusunda iyi değilim. Makale, kompozisyon vs yazmak zor gerçekten. Çok istiyorum ama, bakalım 4 senedir kendi sitemi ellemedim, biraz kafam düzelsin bir şeyler yapacağım.
@mgsmus Üstad,

Siz de makale yazmak zor diyorsanız kim yazabilir? Sizin gibi yetenekli ve araştırmacı olan yazılım geliştiriciler bir yerden sonra farklı dillere geçiyor.
Bir şeyler yapabilirseniz çok faydalanırız, burada yazdığınız yanıt ve yorumlarda olduğu gibi.

Şimdiden teşekkürler, iyi çalışmalar..