c 程序間心跳檢測 socket (UDP)

2021-09-17 18:21:30 字數 2620 閱讀 3825

目錄

**結構如下:

**解析:

check tread:

receive tread:

send  tread:

編譯**方式:

功能實現:可以檢測 程序是否 live 或者 僵死,然後根據具體狀態,發signal 處理被檢測的程序

demo 有兩個程序 乙個是 server 另乙個是 client (可以有多個)(send && receive)

├── bin

├── include

│   ├── heartbeat.h

│   ├── log.h

│   └── udpnet.h

├── makefile

├── make.sh

├── obj

└── src

├── heartbeat.cpp

├── log.cpp

├── recv

│   └── heartbeatmonitor.cpp

├── send

│   └── heartbeatmonitor_send.cpp

└── udpnet.cpp

兩個程序,主要有3個執行緒來實現:send tread  receive tread  check thread

void* heartbeatmonitor::checkthread( void* param )

goto loop_delay;

} else

new_heartbeat = monitor->getheartbeat();

err_found = false;

for (int i = 0; i < heartbeat_counter_num; ++i) //檢測不同模組的程序的 狀態counter

}if (err_found)

for (int i = 0; i < heartbeat_counter_num; ++i)

}else

}checker.heartbeat = new_heartbeat;

statistic.last_heart = new_heartbeat;

loop_delay:

++call_cnt;

if (call_cnt % heartbeat_print_cycle == 0)

hb_usleep(heartbeat_cycle_ms * 1000); // 3000 ms

} return (void *)0;

}

/* static */ void* heartbeatmonitor::recvthread( void* param )

else

continue;

}//hbprintf(debug_log, dbg_head "hearbeat recv ok.");

monitor->pkg_cnt++;

statistic.ok_cnt++;

monitor->parseheartbeatpkg();

} return (void *)0;

#undef dbg_head

}

/* static */ void* heartbeatsender::sendthread( void* param )

sender->generateheartbeatpkg();

hbprintf(debug_log," yl -- dest_ip = %d ,dest_port = %d,sender->send_size =%d , sender->send_buff =%s",sender->dest_ip,sender->dest_port,sender->send_size,sender->send_buff);

ret = sender->netadp.netsend(sender->dest_ip,

sender->dest_port,

sender->send_buff,

sender->send_size,

&iret);

if (ret == false)

else

goto cycle_deley;

}// hbprintf(debug_log, dbg_head "hearbeat send ok.");

statistic.last_heart = sender->getheartbeat();

statistic.ok_cnt++;

cycle_deley:

++call_cnt;

if (call_cnt % heartbeat_print_cycle == 0)

hb_usleep(heartbeat_cycle_ms * 1000); // 3000 ms

} return (void *)0;

#undef dbg_head

}

to click on:core download

make all  即可以編譯出搜有模組

有興趣的可以修改 makefile和** 編譯多個  receive 端

集群間心跳檢測

皇室 杭州 sunface 2015 11 23 星期一 上午 10 24 04 erl kernel net ticktime或者net kernel set net ticktime 1可以設定集群間的live 檢測心跳間隔 皇室 杭州 sunface 2015 11 23 星期一 上午 10 ...

C 程序間通訊

程序之間通訊的幾種方法 在windows程式中,各個程序之間常常需要交換資料,進行資料通訊。常用的方法有 使用記憶體對映檔案 通過共享記憶體dll共享記憶體 使用sendmessage向另一程序傳送wm copydata訊息 比起前兩種的複雜實現來,wm copydata訊息無疑是一種經濟實惠的一中...

c 程序間通訊

一 程序間通訊的方式 程序間通訊的方式有很多,常用的有共享記憶體 記憶體對映檔案 共享記憶體dll 剪下板等 命名管道和匿名管道 傳送訊息等幾種方法來直接完成,另外還可以通過 socket 口 配置檔案和登錄檔 等來間接實現程序間資料通訊任務。以上這幾種方法各有優缺點,具體到在程序間進行大資料量資料...