Ana içeriğe geç

Giriş

ipucu

Eğer Socket.IO'ya yeniyseniz, öğreticimizi incelemenizi öneririz.

Socket.IO Nedir

Socket.IO, bir istemci ile bir sunucu arasında düşük gecikmeli, iki yönlü ve olay tabanlı iletişimi mümkün kılan bir kütüphanedir.

Socket.IO bağlantısı, farklı düşük seviyeli taşıma yöntemleri ile kurulabilir:

Socket.IO, en iyi mevcut seçeneği otomatik olarak seçecektir; bu, aşağıdakilere bağlıdır:

  • tarayıcının yetenekleri (bkz. burada ve burada)
  • ağ (bazı ağlar WebSocket ve/veya WebTransport bağlantılarını engeller)

Bunun hakkında daha fazla ayrıntıyı "Nasıl çalışır" bölümünde bulabilirsiniz.

Sunucu Uygulamaları

DilWeb Sitesi
JavaScript (Node.js)- Kurulum adımları- API- Kaynak kod
JavaScript (Deno)https://github.com/socketio/socket.io-deno
Javahttps://github.com/mrniko/netty-socketio
Javahttps://github.com/trinopoty/socket.io-server-java
Pythonhttps://github.com/miguelgrinberg/python-socketio
Golanghttps://github.com/googollee/go-socket.io
Rusthttps://github.com/Totodore/socketioxide

İstemci Uygulamaları

DilWeb Sitesi
JavaScript (tarayıcı, Node.js veya React Native)- Kurulum adımları- API- Kaynak kod
JavaScript (WeChat Mini-Programları için)https://github.com/weapp-socketio/weapp.socket.io
Javahttps://github.com/socketio/socket.io-client-java
C++https://github.com/socketio/socket.io-client-cpp
Swifthttps://github.com/socketio/socket.io-client-swift
Darthttps://github.com/rikulo/socket.io-client-dart
Pythonhttps://github.com/miguelgrinberg/python-socketio
.Nethttps://github.com/doghappy/socket.io-client-csharp
Rusthttps://github.com/1c3t3a/rust-socketio
Kotlinhttps://github.com/icerockdev/moko-socket-io
PHPhttps://github.com/ElephantIO/elephant.io

Socket.IO NEDİR DEĞİL

uyarı

Socket.IO bir WebSocket uygulaması DEĞİLDİR.

Socket.IO, mümkün olduğunda WebSocket'i taşımak için kullanmasına rağmen, her pakete ek meta veriler ekler. Bu nedenle, WebSocket istemcisi bir Socket.IO sunucusuna başarılı bir şekilde bağlanamaz ve bir Socket.IO istemcisi de sıradan bir WebSocket sunucusuna bağlanamaz.

UYARI: istemci BAĞLANAMAYACAK!

const socket = io("ws://echo.websocket.org");

Düz bir WebSocket sunucusu arıyorsanız, lütfen ws veya µWebSockets.js inceleyin.

Ayrıca, Node.js çekirdeğine bir WebSocket sunucusu dahil edilmesi hakkında tartışmalar bulunmaktadır.

İstemci tarafında, robust-websocket paketine ilginizi çekebilir.

uyarı

Socket.IO, mobil uygulamalar için arka planda bir hizmette kullanılmak üzere tasarlanmamıştır.

Socket.IO kütüphanesi, sunucuya açık bir TCP bağlantısı tutar, bu da kullanıcılarınız için yüksek pil tüketimine yol açabilir. Lütfen bu kullanım durumu için FCM gibi bir özel mesajlaşma platformu kullanın.

Özellikler

Socket.IO'nun düz WebSocket'ler üzerinde sunduğu özellikler şunlardır:

HTTP uzun anketleme geri dönüş

Bağlantı, WebSocket bağlantısı kurulamıyorsa HTTP uzun anketlemeye geri dönecektir.

Bu özellik, proje on yıldan fazla bir süre önce oluşturulduğunda, insanların Socket.IO'yu kullanmasının #1 nedeni idi (!), çünkü WebSocket'lerin tarayıcı desteği hala emekleme aşamasındaydı.

Artık en çok tarayıcı WebSocket'leri desteklese de (daha fazla %97), bu hala harika bir özellik çünkü bazı yanlış yapılandırılmış proxy'lerin arkasında olan kullanıcıların WebSocket bağlantısı kuramadıklarına dair raporlar almaya devam ediyoruz.

Otomatik yeniden bağlantı

Bazı özel koşullar altında, sunucu ile istemci arasındaki WebSocket bağlantısı kesilebilir ve her iki taraf da bağlantı durumunu bilmeyebilir.

Bu nedenle Socket.IO, bağlantının durumunu periyodik olarak kontrol eden bir kalp atış mekanizması içerir.

Ve istemci sonunda bağlantısı koptuğunda, sunucuyu zorlamamak için otomatik olarak üstel bir geri bağlantı gecikmesi ile yeniden bağlanır.

Paket tamponlama

Paketler, istemci bağlantısı kesildiğinde otomatik olarak tamponlanır ve yeniden bağlandığında gönderilir.

Daha fazla bilgi burada.

Onaylar

Socket.IO, bir olay göndermenin ve cevap almanın kolay bir yolunu sunar:

Gönderen

socket.emit("hello", "world", (response) => {
console.log(response); // "aldım"
});

Alıcı

socket.on("hello", (arg, callback) => {
console.log(arg); // "world"
callback("aldım");
});

Ayrıca bir zaman aşımı ekleyebilirsiniz:

socket.timeout(5000).emit("hello", "world", (err, response) => {
if (err) {
// diğer taraf verilen gecikme içinde olayı onaylamadı
} else {
console.log(response); // "aldım"
}
});

Yayınlama

Sunucu tarafında, tüm bağlı istemcilere veya belirli bir istemci grubuna bir olay gönderebilirsiniz:

// tüm bağlı istemcilere
io.emit("hello");

// "haber" odasındaki tüm bağlı istemcilere
io.to("news").emit("hello");

Bu, birden fazla düğüme ölçeklenirken de çalışır.

Çoklama

Ad alanları, uygulamanızın mantığını tek bir paylaşılan bağlantı üzerinden paylaşmanıza olanak tanır. Bu, yalnızca yetkili kullanıcıların katılabileceği bir "admin" kanalı oluşturmak istiyorsanız faydalı olabilir.

io.on("connection", (socket) => {
// klasik kullanıcılar
});

io.of("/admin").on("connection", (socket) => {
// admin kullanıcılar
});

Bunun hakkında daha fazla bilgi burada.

Ortak Sorular

Socket.IO'ya hala ihtiyaç var mı?

Bu adil bir soru, çünkü WebSocket'ler neredeyse her yerde artık destekleniyor.

Bununla birlikte, eğer uygulamanızda düz WebSocket kullanıyorsanız, sonunda zaten Socket.IO'da dahil (ve savaş testinden geçmiş) çoğu özelliği, örneğin yeniden bağlantı, onaylar veya yayınlama özelliklerini uygulamanız gerektiğine inanıyoruz.

Socket.IO protokolünün aşırı yükü nedir?

socket.emit("hello", "world") tek bir WebSocket çerçevesi olarak 42["hello","world"] olarak gönderilecektir:

  • 4, Engine.IO "mesaj" paket tipidir
  • 2, Socket.IO "mesaj" paket tipidir
  • ["hello","world"] argüman dizisinin JSON.stringify() ile dönüştürülmüş halidir

Yani, her mesaj için birkaç ek bayt, bu da özel bir ayrıştırıcı kullanılarak daha da azaltılabilir.

bilgi

Tarayıcı paketinin boyutu 10.4 kB (minify edilmiş ve gzipped).

Socket.IO protokolünün ayrıntılarını burada bulabilirsiniz.

Bir şey düzgün çalışmıyor, lütfen yardım edin?

Lütfen Sorun Giderme kılavuzumuzu kontrol edin.

Sonraki Adımlar

  • Başlangıç örneği
  • Sunucu kurulumu
  • İstemci kurulumu