| 字段名 | 类型 | 必填 | 说明 |
|---|---|---|---|
device_name |
String | 是 | 设备唯一标识名称(如 "Android_01", "Camera_A") |
timestamp |
Number | 否 | 当前时间戳(支持秒或毫秒)。若不传,服务器将使用接收请求的时间。 |
{
"code": 200,
"data": {
"device_name": "Android_01",
"status": "online",
"last_heartbeat": "2023-10-27 10:30:05"
},
"message": "Heartbeat received"
}
/**
* 发送心跳包
* @param deviceName 设备名称
* @param serverUrl 服务器地址 (例如 https://haoguozhi.com)
*/
async function sendHeartbeat(deviceName: string, serverUrl: string = ''): Promise {
const url = `${serverUrl}/apipy/api/heartbeat/`;
const payload = {
device_name: deviceName,
timestamp: Date.now() // 自动处理毫秒
};
try {
const response = await fetch(url, {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(payload)
});
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
const result = await response.json();
console.log('Heartbeat success:', result);
} catch (error) {
console.error('Heartbeat failed:', error);
}
}
// 调用示例
// setInterval(() => sendHeartbeat('Web_Client_01'), 10000); // 每10秒发送一次
需添加依赖: implementation("com.squareup.okhttp3:okhttp:4.11.0")
import okhttp3.MediaType.Companion.toMediaType
import okhttp3.OkHttpClient
import okhttp3.Request
import okhttp3.RequestBody.Companion.toRequestBody
import org.json.JSONObject
import java.io.IOException
class HeartbeatManager {
private val client = OkHttpClient()
private val jsonMediaType = "application/json; charset=utf-8".toMediaType()
fun sendHeartbeat(deviceName: string, serverUrl: string = "https://haoguozhi.com") {
val url = "$serverUrl/apipy/api/heartbeat/"
// 构建 JSON
val jsonObject = JSONObject()
jsonObject.put("device_name", deviceName)
jsonObject.put("timestamp", System.currentTimeMillis())
val requestBody = jsonObject.toString().toRequestBody(jsonMediaType)
val request = Request.Builder()
.url(url)
.post(requestBody)
.build()
// 异步请求
client.newCall(request).enqueue(object : okhttp3.Callback {
override fun onFailure(call: okhttp3.Call, e: IOException) {
println("Heartbeat failed: ${e.message}")
}
override fun onResponse(call: okhttp3.Call, response: okhttp3.Response) {
response.use {
if (!response.isSuccessful) {
println("Unexpected code $response")
} else {
println("Heartbeat success: ${response.body?.string()}")
}
}
}
})
}
}
// 调用示例
// val manager = HeartbeatManager()
// manager.sendHeartbeat("Android_Device_01")
curl -X POST https://haoguozhi.com/apipy/api/heartbeat/ \
-H "Content-Type: application/json" \
-d '{
"device_name": "Terminal_User",
"timestamp": 1698373805
}'