WebSocket protokolü ( WS ), kalıcı bir bağlantı üzerinden bir tarayıcı ile bir sunucu arasında veri alışverişi yapma yeteneği sağlar. Veriler, bağlantı kesilmeden ve ek HTTP istekleri olmadan "paketler" şeklinde her iki yönde iletilir.

WebSocket, sohbet odaları, çevrimiçi oyunlar, gerçek zamanlı pazar yerleri vb. gibi sürekli iletişim hizmetleri için iyidir.

Örnek olarak basit bir sohbet için bir arka uç oluşturalım. Temel özelliklerin sağlanması gereklidir:

  1. Sohbet için mesaj gönderme.
  2. Mesajın yazarının belirlenmesi.
  3. Eylem bildirimleri. Örneğin, sohbete yeni bir üyenin katılması, sohbetten ayrılması, yazma göstergesi (birisi yazıyor...)

Veritabanı modeli

Veritabanı için bir model oluşturarak başlayalım. Başlangıçta mesajları ve yazışma geçmişini veritabanında depolamayı planlamasak bile, mesajları ve bildirimleri göndermeyi yapılandırmak için bir modele ihtiyacımız var.

Aşağıdakileri içeren genel bir chat_event modeli oluşturalım:

  1. Kullanıcı ile ilişki. Herhangi bir mesaj, hangi kullanıcıya atıfta bulunduğu hakkında bilgi içerir.
  2. 4 olası seçenekle Type (enum) alanını yazın. Connected ve Disconnected - bir kullanıcı bağlandığında veya bağlantısı kesildiğinde bildirimler için. Typing - kullanıcının şu anda yeni bir mesaj yazdığı bilgisini iletmek için. Message - standart bir kısa mesaj için.
  3. Message (text) - mesajın metni.

Uç nokta yapılandırması

Bir sonraki geliştirme adımı, uygulamanın diğer özelliklerinde ortak olan standart yaklaşımdan biraz farklıdır. Genellikle bir iş süreci oluşturulur ve ardından onu çalıştırmak için bir uç nokta yapılandırılır. WebSockets durumunda, her şey farklı şekilde gerçekleşir ve başlangıç noktası, iş süreçlerinin daha da oluşturulacağı tetikleyicilere dayalı bir uç noktanın oluşturulmasıdır.

Bir bitiş noktası bölümüne ihtiyacımız var. Orada uygun seçeneği seçerek yeni bir uç nokta yaratıyoruz - WebSocket Endpoint .

WebSockets için istek yöntemi seçeneği yoktur - her zaman GET şeklindedir. Basit bir URL - /chat/ belirleyelim ve onun için aynı ada sahip bir grup oluşturalım.

Ardından, WebSocket içindeki veri alışverişi formatını belirleyecek değişkenler oluşturmamız gerekiyor.

  • Client-to-Server . Standart iş süreçleri için gelen parametrelere benzer. Örneğimizde, basit bir metin değişkeni mesajı oluşturacağız (sunucuya sıradan metin mesajları göndereceğiz).
  • Server-to-Client . Burada, sunucudan kullanıcıya veri gönderen sunucu mesajları için değişkenler oluşturulur. Bunun bir kullanıcı isteğine verilen yanıtla aynı olmadığını unutmayın. Ve kullanıcı eylemlerine bir tepki olarak gönderilebilse de, daha çok bazı dış olaylardan kaynaklanır. Örneğimizde, sunucu sohbetteki tüm olayların bildirimlerini gönderecek, bu nedenle chat_event modelini bir değişken olarak ayarlayacağız.

Değişkenleri oluşturduktan sonra asıl konuya geçebilirsiniz - WebSocket mantığını oluşturmaya. Bir WebSocket'ta yeni bir mesaj alındığında ve ayrıca bir bağlantı kurulduğunda veya bağlantısı kesildiğinde tetiklenen tetikleyicilere dayanır.

Bir iş süreci oluşturmak

connect tetikleyicisini kullanalım ve bunun için bir iş süreci oluşturalım. Kullanıcı WebSocket ile bağlantı kurduğu anda başlatılacak ve görevi, bağlı tüm kullanıcılara bununla ilgili bir bildirim göndermek olacaktır.

Başlangıç bloğunun iki parametre içerdiğini unutmayın: User ID ve Connection ID . Böylece hem bağlantıyı kuran kullanıcıyı anında tespit edebilir hem de bu bağlantı için benzersiz bir tanımlayıcı elde edebilirsiniz. Gelecekte, bu tanımlayıcı, örneğin hedeflenen mesajları göndermek veya bağlantıyı zorla sonlandırmak için kullanılabilir.

İş sürecinin gerekli tüm adımlarını oluşturun:

  1. Make User . Bir kullanıcı modeli oluşturmak için User ID başlangıç parametresini kullanalım.
  2. Make chat_event . Bir olay bildirim modeli oluşturun. Bir önceki adımda oluşturduğumuz modeli kullanarak kullanıcıya bağlayacağız ve ayrıca olay tipini seçip Type = Connected olarak ayarlayacağız. Mesaj parametresini kullanmıyoruz çünkü bu durumda iletilen bir mesaj değil, bir bağlantı bildirimi.
  3. WSS Connections /chat/ . Bu bloğu kullanarak, tüm aktif WebSocket bağlantılarının bir listesini alacağız.
  4. For Each Loop . Connections dizisini, her bağlı kullanıcıya bildirim göndererek bir döngü parametresi olarak kullanıyoruz.
  5. Expand WebSocket Connection . Connection ID almak için bağlantı bilgilerini genişletin.
  6. WSS Send /chat/ . Bildirimi göndermek için Connection ID ve oluşturulan chat_event kullanırız.

WebSockets'i test etmek için Postman'ı kullanma

Bu aşamada, WebSocket, önemli bir işlevselliğe sahip olmasa da, zaten çalışır durumdadır ve pratikte test edilebilir. Bunu yapmak için WebSockets ile çalışmanıza izin veren herhangi bir aracı kullanabilirsiniz. Örnek olarak Postman ile bunun nasıl yapılacağına bir göz atalım.

New button tıklayıp WebSocket Request seçmeli

WebSocket için URL'yi belirtmeniz gerekir. WebSocket'in diğer uç noktalarla birlikte listede olduğu Swagger kullanılarak bulunabilir.

Standart isteklerin aksine WebSockets, wss protokolünü kullanarak çalışır, bu nedenle https wss ile değiştirmeniz gerekir. Sonuç benzer bir URL olmalıdır: wss://qvlxglh-app.apms.io/api/chat/

Ardından, bağlantı anonim olamayacağından, isteğe bir kimlik doğrulama belirteci eklemeniz gerekir. Bearer lBCiunRWg6BfogDrLml4jrC4iJiWucKo gibi bir değere sahip bir Authorization başlığı oluşturmanız gerekir. lBCiunRWg6BfogDrLml4jrC4iJiWucKo yerine, yetkilendirme sonucunda elde edilebilecek kendi jetonunuzu eklemeniz gerekir ( POST /auth/ endpoint).

Her şey doğru yapılırsa, Connect düğmesine tıklanarak bir bağlantı kurulacak ve ilk mesaj, daha önce oluşturulan gönderme iş süreci olan sunucu tarafından alınacaktır.

Aynı zamanda, sunucudan mesaj almanın yalnızca bizden gelen bazı taleplere bir tepki olarak gerçekleşmemesini sağlayabilirsiniz. Diğer kullanıcıların eylemleri bunlara neden olabilir. Bunu test etmek için, başka bir kullanıcının kimlik doğrulama belirtecini kullanarak başka bir sekmede bağlantı kurabilirsiniz. Sunucudan bunu bildiren bir mesaj, etkin bir bağlantıya sahip tüm sekmelere gönderilecektir.

Mesajlaşma için iş süreci

Artık WebSocket'in yeteneklerini geliştirmeye devam edebilir ve mesajlaşma için bir iş süreci oluşturabilirsiniz. Bu arada şimdi mesaj atabilirsiniz ama önce mantığı oluşturmadan bu hiçbir anlam ifade etmez, mesaj herhangi bir tepkiye yol açmaz. Bu nedenle, uç nokta ayarlarına geri dönelim ve receive tetikleyicisi için bir iş süreci oluşturalım.

Birçok yönden, önceki iş sürecine benzer olacaktır. Bir mesaj alındığında, bir chat_event oluşturmak ve tüm sohbet katılımcılarına bununla ilgili bildirimler göndermek gerekecektir. Aradaki fark, mesajın kendisinin chat_event eklenmesi gerekmesi ve mesajın yazarının posta listesine dahil edilmesi gerekmemesidir.

İş sürecinin ilk bölümünde aynı bloklar kullanılır. Make chat_event bloğunda, type = message ayarlamanız ve mesajın kendisini başlangıç bloğundan eklemeniz gerekir.

Döngüde, (Equal blok) kontrol etmemiz ve yalnızca alıcının bağlantı kimliği göndericinin bağlantı kimliğiyle ( If-Else = False ) eşleşmiyorsa mesajı göndermemiz gerekir.

Sonucu yayınlayabilir ve test etmeye başlayabilirsiniz. Mesajın kendisinin JSON biçiminde olduğuna dikkat edin, bu nedenle mesaj değişkenini kullanırken şu şekilde görünecektir:

{"message":"Some text here"}

Örnekte, bir sohbet bağlantı bildirimi aldığınızı, kendi mesajınızı gönderdiğinizi ( Hi! ) ve bir yanıt aldığınızı ( Glad to see you! ) görebilirsiniz.

Bu, WebSockets kullanarak sohbet için temel arka ucun oluşturulmasını tamamlar. Ön ucu oluşturmaya başlayabilir ve kendi gerçek zamanlı mesajlaşma uygulamanızı geliştirebilirsiniz.

Was this article helpful?

AppMaster.io 101 Çarpışma Kursu

10 Modüller
2 haftalar

Nereden başlayacağınızdan emin değil misiniz? Yeni başlayanlar için hızlandırılmış kursumuzla başlayın ve AppMaster'ı A'dan Z'ye keşfedin.

Kursa Başlayın
Development it’s so easy with AppMaster!

Daha Fazla Yardıma mı ihtiyacınız var?

Herhangi bir sorunu uzmanlarımızın yardımıyla çözün. Zamandan tasarruf edin ve uygulamalarınızı oluşturmaya odaklanın.

headphones

İletişim desteği

Bize sorununuzu anlatın, size bir çözüm bulalım.

message

Topluluk Sohbeti

Soruları sohbetimizde diğer kullanıcılarla tartışın.

Topluluğa Katılın