Socket.io'nun Android ile en iyi uygulamaları

Socket.IO, gerçek zamanlı çift yönlü olaya dayalı iletişimi sağlar. Her platformda, tarayıcıda veya cihazda çalışır, eşit olarak güvenilirliğe ve hıza odaklanır. Socket.IO, WebSockets API (Müşteri tarafı) ve NodeJ'lerin üzerine inşa edilmiştir.

Socket.IO, diğer gerçek zamanlı protokollere geri dönüş seçenekleri olan bir WebSocket kütüphanesi değildir. Diğer gerçek zamanlı protokollerin üstünde özel bir gerçek zamanlı taşıma protokolü uygulamasıdır. Protokol anlaşması parçaları, standart WebSocket özelliğini destekleyen bir müşterinin Socket.IO sunucusuyla iletişim kuramamasına neden olur.
Ve bir Socket.IO uygulayan istemci, Pocket.IO tabanlı bir WebSocket veya Long Polling Comet sunucusuyla konuşamaz. Bu nedenle, Socket.IO, hem istemci hem de sunucu tarafında Socket.IO kitaplıklarının kullanılmasını gerektirir.

Resmi site diyor ki

Socket.IO, gerçek zamanlı çift yönlü olaya dayalı iletişimi sağlar.

Socket.IO, istemcinin ve sunucunun gerçek zamanlı iletişim kurmasını sağlar. Socket.IO NodeJs sunucusu, belirli bir rotada tetiklenecek olayları tanımlar. Bu olayları, istemciler tarafından yayılan bir sunucu tarafından dinlenir.

Socket.IO, NodeJ sunucusunu arka uç olarak kullanan web uygulamaları üzerinden kolayca uygulanabilir. Ama Android durumunda?

O zaman Naoyuki Kanezawa [@nkwaza] tarafından yaratılmış en iyi kütüphanemiz var.
ve bir Socket.IO sunucusunun müşterisi olarak android için resmi Socket.IO Github tarafından.

Kişisel tercihiniz olarak neyi seçmek istediğinizi size bağlı.
0] Soket.Io Android-Java istemcisi

1] Nkwaza Android Socket.IO müşteri kütüphanesi

ikisini de kullanabilirsiniz. İkincisini tavsiye ederim çünkü çok kullanışlı ve kullanımı oldukça kolay.
NKwaza'nın Socket.IO sitesindeki resmi bloguna bakabilirsiniz.

Socket.IO android kütüphanesini uygulamak için mükemmel ve kusursuz bir şekilde okumalısınız.
SOcket.IO Android Client kütüphanesini uygulamak için üç adım vardır.

0. Soketi sıfırla
1. Soketi sunucuya bağlayın
2. Olay ya da olayları dinlemeye başlayın

Socket.IO’yu kullandığımız zamanlar genellikle

1-Yanlış başlatma ve NullPointerExecption verir.

2- Priz bağlı olmadığından uygun olay gönderilemedi ve dinlenemedi.

Bundan kaçınmak için aşağıdaki yaklaşımı deneyin.

Çok ilk adım Uygulama düzeyinize build.gradle dosyasına aşağıdaki bağımlılığı ekleyin

uygulama ‘com.github.nkzawa: socket.io-client: 0.5.2 '

# 0. Soketin başlatılması

Soketi etkilemek için, Uygulama sınıfını genişleten bir sınıfı oluşturun.

Aşağıdaki kod parçacığına bakın

android.app.Application alma;
com.github.nkzawa.socketio.client.IO dosyasını içe aktarın;
com.github.nkzawa.socketio.client.Socket öğesini içe aktarın;
java.net.URISyntaxException alma;
public sınıf RatKiller, Uygulamayı genişletiyor {
    özel Soket mSocket;
    özel statik final String URL = "http://yoururl.com";
    @Override
    genel geçersiz onCreate () {
        super.onCreate ();
        Deneyin {
            mSocket = IO.socket (URL);
        } catch (URISyntaxException e) {
            yeni RuntimeException (e) atmak;
        }
    }
   Genel Soket getmSocket () {
     mSocket döndürür;
   }
}

Burada uygulama sınıfında, bildiğiniz bir referans olarak kullanacağımız özel bir değişken soketi bildiriniz.
Yardımcı yöntem getmSocket () tüm projemizde kullanabileceğimiz soket örneğini döndürür.

# 1. Soketi bağlama

Soketi sunucuya bağlamak için getmSocket () yönteminden döndürülen soket örneğinde connect () yöntemini kullanmamız gerekir.
MainActivity veya herhangi bir aktivitenizin içine, onCreate () metoduna aşağıdaki kodu ekleyin.

genel sınıf MainActivity, AppCompatActivity'yi {
özel Soket mSocket;
@Override
korumalı geçersiz onCreate (Bundle savedInstanceState) {
    super.onCreate (savedInstanceState);
    setContentView (R.layout.activity_main);
RatKiller uygulaması = (RatKiller) getApplication ();
    mSocket = app.getmSocket ();
    //
    //
    // ...
}

Bağlantının kurulup kurulmadığını kontrol etmek için connection () metodunu kullanarak kontrol edebilirsiniz.

if (mSocket.connected ()) {
  Toast.makeText (MainActivity.this, "Connected !!", Toast.LENGTH_SHORT) .show ();
 }

# 2. Dinle veya Emit etkinliği

Olayı yaymak için emit () yöntemini kullanabilirsiniz. Emit (), sunucuda düğme tıklatması veya herhangi bir eylem yanıtı olarak uygulayacağınız bir olayı tetikler.

button.setOnCLickListener (görünüm-> mSocket.emit (), poisonObject “öldürmek”);

Sunucu tarafından gönderilen belirli olayları dinlemek için, on () yöntemini kullanırız. On () yöntemi, sağlanan bir kanalı açar ve yanıtı sunucudan alır.

mSocket.on ("rat_data", yeni Verici.Listener () {
    @Override
    public void çağrısı (Object ... args) {
        JSONObject verileri = (JSONObject) args [0];
// buradaki veriler JSON Formatında
        //Toast.makeText(MainActivity.this, data.toString (), Toast.LENGTH_SHORT) .show ();
}
});

Bazen, müşterinin / uygulamanın düğme tıklamasıyla veya tetiklenen herhangi bir eylemle tetikleyeceği belirli olayların yanıtlarını dinlemeniz gerekir.
Bu gibi durumlarda, on () yöntemini emit () yöntemini kullanarak çağırabiliriz. Emit () yöntemi belirli bir rota / kanalda bir olay tetikler ve on () sunucu tarafından gönderilen yanıtı derhal dinler.
Böyle bir şey yaparak bunu başarabilirsiniz.

mSocket.emit ("get_rat_data"). on ("rat_data", yeni Emitter.Listener () {
    @Override
    public void çağrısı (Object ... args) {
        JSONObject verileri = (JSONObject) args [0];
// veriler JSOn formatında
}
});

Talep üzerine Veri / Yük

Talep yükü veya talep gövdesi verileri JSON formatında sokete gönderilmelidir. JSON Nesnesi, emit () yönteminin giriş parametresidir. Java’nın JSONObject ve JSONArray sınıfı, verilerin JSON gövde biçimini oluşturmamıza yardımcı olur.
Bunu olarak yapabilirsiniz

JSONArray poisonArray = new JSONArray ();
poisonArray.put (1);
poisonArray.put (2);
JSONObject poisonObject = new JSONObject ();
Deneyin {
    
    poisonObject.put ( "zehirleri", poisonArray);
} yakalamak (JSONException e) {
    e.printStackTrace ();
}

Kullanıcı Arabirimini Uygulama

Verileri sunucudan bir yanıt olarak aldığınızda, kullanıcı arayüzünüzü güncellemeniz gerekir. Alınan verileri kullanarak UI'yi güncellemek için, tüm UI bağlama mantığını runOnUiThread () yönteminde gerçekleştirmemiz gerekir.

Emmiter.Listener {…} adlı call () yöntemi, bir arka plan iş parçacığı üzerinde çalışıyordu. Aramanın içindeki UI’ye özgü yöntemi aramayı denerseniz, en sevdiğiniz Çalışma Zamanı İstisnaları'nı patlatarak patlar.
Bunu bir runOnUiThread (Runnable r) yöntemini çağırarak elde edebilirsiniz.

mSocket.emit ("kill", poisonObject) .on ("rat_data", yeni Emitter.Listener () {
    @Override
    public void çağrısı (Object ... args) {
     JSONObject verileri = (JSONObject) args [0];
// veriler JSOn formatında
     runOnUiThread (new Runnable () {
         @Override
         genel geçersiz çalıştırma () {
           Toast.makeText (MainActivity.this, "Haha !! Tüm fareler öldürüldü!", Toast.LENGTH_SHORT) .show ();
          ratTextView.setText ( "0");
          // kullanıcı arayüzü mantığınız ne olursa olsun
         }
     });
    }
});

Ve şimdi sorun çözüldü. Evet biliyorum! Yerdeki her yerde koşan o Rats'ı öldüreceğim.