Android soket bağlantısı
Merhaba öncelikle internete genel bir araştırma sonucu bu soruyu sorma ihtiyacı duydum. Bir kaç sitede socet.io kütüphanesinin anlatımını gördüm. Ancak şöyleki onlar hazır sunucu kullanıyor ve benim bu konuda bilgim çok az. Geleyim asıl konuya benim Play store da bir uygulamam var Araç ların muayenelerini takip eden kullanıcıya bildirim atarak bilgi veren. Bu uygulamada iki farklı kullanıcı tipi mevcut "Şirket Sahibi" ve "Şoför". Şoför kullanıcısı konum paylaştığında veriyi anlık olarak ya bir yere kaydetmeliyim yada şirket sahibine göndermeliyim ancak bunu verimli olarak soket programlama ile yapabilirim diye düşündüm. Şu an hali hazırda firebase firestore ile yaptım ancak konum paylaşılırken veri tabanı aşırı yükleniyor. Bu da fazla kaynak tüketiyor. Genel olarak toparlar isem ne yapmalıyım soket programlama burada işimi görür mü, görür ise sunucu işini nasıl ayarlarım veya sunucusuz bu işi telefonları içinde halledebilirmiyim. Veya başka bir yol var mı ? Şimdiden verilen her cevap için teşekkürler. Evet arkadaşlar çetrefilli eziyeter sonunda bir yere varmayı başardım. :D İlk olarak Socket.io yu local de kullanmayı başardım. Ancak on bir problem var bağlantı sadece tek kişilik bunu nasıl çoklarım ? Kodları aşağıya bırakıyorum.
Javascript kodu :
var express = require("express");
var app = express();
var server = require("http").Server(app);
var io = require("socket.io")(server);
app.get("/", function(req, res) {
res.sendFile(__dirname + "/index.html");
});
io.on("connection", function(socket) {
socket.on("update", data => io.emit("update", { data }));
});
server.listen(3000);
Html kodu :
<html>
<head> </head>
<body>
Merhaba Bu bir Api'dir.
<button>Update</button>
<p></p>
<script src="/socket.io/socket.io.js"></script>
<script>
var socket = io();
var button = document.querySelector("button");
button.onclick = function() {
socket.emit("update", { dolarRate: 5.12 });
};
var p = document.querySelector("p");
socket.on("update", function(res) {
p.innerText = res.data;
});
</script>
</body>
</html>
Html çıktısı :
Merhaba Bu bir Api'dir.
{"get_user_id":"XbSTdXvrg3TtD1n0AvJ83HPzkqD3","plaka":"","push_user_id":"wpwHUNRh9fN7xt3miV7Y0jnuXul1","s":0.0,"t":1568279569668,"x":40.82429568,"y":29.47737739}
Android kodu :
@SuppressLint("MissingPermission")
private void getLocation() {
if (MainActivity.isLocation) {
try {
mSocket = IO.socket("http://192.168.8.103:3000/");
} catch (URISyntaxException e) {
e.printStackTrace();
Log.e("Hata", e.getMessage());
}
mSocket.on(Socket.EVENT_CONNECT, onConnect);
mSocket.on(Socket.EVENT_DISCONNECT, onDisconnect);
mSocket.connect();
pb.setVisibility(View.VISIBLE);
tw_konum.setText("Konum verisi bekleniyor.");
LocationListener konumDinleyicisi = new LocationListener() {
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
@Override
public void onProviderEnabled(String provider) {
}
@Override
public void onProviderDisabled(String provider) {
NotificationRegulative.getInstance(MainActivity.this).clearNotLoc(MainActivity.this, 0);
if (MainActivity.isLocation) {
buildAlertMessageNoGps(MainActivity.this);
}
}
@Override
public void onLocationChanged(Location loc) {
loc.getLatitude();
loc.getLongitude();
loc.getSpeed();
DecimalFormat df = new DecimalFormat(".##");
if (MainActivity.isLocation) {
if (MainActivity.mainUser != null) {
if (!MainActivity.mainUser.getTel().equals("") && MainActivity.mainUser.getTel() != null) {
String text = "X = " + df.format(loc.getLatitude()) + " Y = " + df.format(loc.getLongitude()) + " Hız = " + df.format((loc.getSpeed() * 3.6));
tw_konum.setText(text);
final Map<String, Object> map = new HashMap<>();
map.put("x", loc.getLatitude());
map.put("y", loc.getLongitude());
map.put("s", (loc.getSpeed() * 3.6));
long time = System.currentTimeMillis();
map.put("t", time);
com.recep.aractakipuygulamasi.entity.Location location = new com.recep.aractakipuygulamasi.entity.Location(
loc.getLatitude(), loc.getLongitude(), (loc.getSpeed() * 3.6), time, MainActivity.mainUserID, sirketSahibiId,"");
Gson gson = new Gson();
final String json = gson.toJson(location);
mSocket.emit("update", json);
NotificationRegulative.getInstance(MainActivity.this).sendNotLoc(text, MainActivity.this);
} else {
tw_konum.setText("Lütfen telefon numaranızı güncelleyiz.");
}
}
} else {
NotificationRegulative.getInstance(MainActivity.this).clearNotLoc(MainActivity.this, 0);
}
}
};
konumYoneticisi.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, konumDinleyicisi);
} else {
tw_konum.setText("Konum paylaşılmıyor.");
pb.setVisibility(View.GONE);
if (mSocket != null) {
mSocket.disconnect();
mSocket.off(Socket.EVENT_CONNECT, onConnect);
mSocket.off(Socket.EVENT_DISCONNECT, onDisconnect);
}
}
}
sockete bağlanan her cihaz paylaşılan veriyi görebiliyor verinin özelliğine göre veri süzülebilir anvak diyelim 10 kişi aynı anda veri paylaşsa ve 10 kişi de veri çekse burada çakışma olacağı kanısındayım. Burada sizlerden yardım istiyorum galiba yeni thread falan açmamız gerek ama nasıl ? Şimdiden hepinize teşekkürler.