- Katılım
- 16 May 2022
- Mesajlar
- 182
- Beğeniler
- 100
Bu yöntemde php API ye belli sürede bir kalp atışı sinyali mantığı ile istek gönderilir ve process suspend olunca arada fark oluşur. Bu farkı tespit eden process kendini resume edildiği zaman kapatır.
(Mantığı kurup kodu iletiyorum olduğu gibi kullanmayın geliştirin eksik yönleri çok fazla. En basitinden apiye isteği atarken şifreleme yapın php tarafında şifreyi çözün aksi halde http Debugger ile respons manipüle edilir)
heartbeat
Kontrol.php
(Mantığı kurup kodu iletiyorum olduğu gibi kullanmayın geliştirin eksik yönleri çok fazla. En basitinden apiye isteği atarken şifreleme yapın php tarafında şifreyi çözün aksi halde http Debugger ile respons manipüle edilir)
C#:
using System;
using System.Net.Http;
using System.Threading.Tasks;
using Newtonsoft.Json.Linq;
class Program
{
static async Task Main(string[] args)
{
HttpClient client = new HttpClient();
string heartbeatUrl = "https://yourapi.com/heartbeat.php";
string kontrolUrl = "https://yourapi.com/kontrol.php";
int interval = 5000;
while (true)
{
try
{
// Heartbeat için istek
var heartbeatResponse = await client.PostAsync(heartbeatUrl, null);
if (heartbeatResponse.IsSuccessStatusCode)
{
Console.WriteLine("Heartbeat başarılı: " + DateTime.Now);
}
else
{
Console.WriteLine("Heartbeat başarısız, uygulama kapanıyor...");
Environment.Exit(1);
}
// Kontrol için istek
var kontrolResponse = await client.GetAsync(kontrolUrl);
if (kontrolResponse.IsSuccessStatusCode)
{
var responseBody = await kontrolResponse.Content.ReadAsStringAsync();
var json = JObject.Parse(responseBody);
if (json["status"] != null && json["status"].ToString() == "running")
{
Console.WriteLine("Uygulama çalışıyor: " + DateTime.Now);
}
else if (json["status"].ToString() == "timeout")
{
Console.WriteLine("Uygulama zaman aşımına uğradı, kapanıyor...");
Environment.Exit(1);
}
}
else
{
Console.WriteLine("Kontrol başarısız, uygulama kapanıyor...");
Environment.Exit(1);
}
}
catch (Exception ex)
{
Console.WriteLine("Hata: " + ex.Message);
Environment.Exit(1);
}
await Task.Delay(interval);
}
}
}
heartbeat
PHP:
<?php
$file = 'heartbeat.txt';
$currentTime = time();
if (file_put_contents($file, $currentTime) !== false) {
header('Content-Type: application/json');
http_response_code(200);
echo json_encode(['status' => 'success', 'timestamp' => $currentTime]);
} else {
header('Content-Type: application/json');
http_response_code(500);
echo json_encode(['status' => 'error', 'message' => 'Dosya yazılamadı']);
}
Kontrol.php
PHP:
<?php
$file = 'heartbeat.txt';
$currentTime = time();
$timeout = 10; // 10 saniyelik zaman aşımı süresi
$response = [];
// Dosya mevcutsa ve zaman damgası okunabiliyorsa
if (file_exists($file)) {
$lastHeartbeat = (int)file_get_contents($file);
if (($currentTime - $lastHeartbeat) > $timeout) {
http_response_code(408); // Request Timeout
$response = [
'status' => 'timeout',
'message' => 'Uygulama zaman aşımına uğradı.'
];
} else {
http_response_code(200); // OK
$response = [
'status' => 'running',
'message' => 'Uygulama normal çalışıyor.'
];
}
} else {
http_response_code(500); // Internal Server Error
$response = [
'status' => 'error',
'message' => 'Heartbeat dosyası bulunamadı.'
];
}
header('Content-Type: application/json');
echo json_encode($response);
Son düzenleme: