背景
最近在做毕业设计,需要用到一些windows中节点通讯(UDP/TCP套接字通讯)以及节点间心跳检测的知识,之前没有学过,看了几篇博客,并结合最近看的关于UNIX下套接字编程的理论(很幸运有些函数和理论同样适用于windows)
Windows下节点间UDP通讯
上边链接中的博客在运行的时候会出现一些bug,需要对自己的VS运行环境稍作修改,具体操作见:
小项目概述
1 要实现的是一个3个节点的集群,包含一个master节点和2个worker节点
2 每一个节点都有自己的能力值(CPU和内存的综合评分),端口号,IP地址(因为在同一个机器上,我们使用进程来模拟节点,所以每一个节点的IP地址都是localhost)
3 该集群现在的任务就是worker节点以一定频次通过心跳机制检测master节点是否依然存活。这里的心跳机制采用的是master节点以一定频次向worker节点发送alive信息的方法,一旦worker在给定的超时时间没有收到Master的alive信息,worker就认为Master节点失效。
4 默认情况下,recvfrom函数是阻塞式的,要想实现超时自动返回,可以使用IO复用中的select方法,变阻塞为非阻塞,worker的超时时间j就可以作为select的超时时间。
程序代码
#include <iostream>
#include <thread>
#include <string>
#include <vector>
#include <algorithm>
#include <Winsock2.h>
#include <thread>
#include <stdio.h>
#include <string.h>
#include <signal.h>
#include <Windows.h>
//允许使用一些旧的网络编程函数
#pragma comment(lib, "ws2_32.lib")
using namespace std;
string role, ability, port_string;
SOCKET sockSrv;
//节点信息的结构体
typedef struct ClusterNode
{
string name;
string port;
int ability;
//排序规则