Chinaunix首页 | 论坛 | 博客
  • 博客访问: 6559928
  • 博文数量: 1159
  • 博客积分: 12444
  • 博客等级: 上将
  • 技术积分: 12570
  • 用 户 组: 普通用户
  • 注册时间: 2008-03-13 21:34
文章分类

全部博文(1159)

文章存档

2016年(126)

2015年(350)

2014年(56)

2013年(91)

2012年(182)

2011年(193)

2010年(138)

2009年(23)

分类: Web开发

2015-12-02 22:02:28

//source code: /run/media/root/E6B2798BB279614B/.../PAPER/paper-3/twin-engine-trigger-code/server-client-pthread-c
----------------------------------------------------------------------------------

Description: when FCD start, this algorithm will run as a deamon

normterm: normal termination;
  normterm=0, SMD is not normal termination;
  normterm=1, SMD is normal termination;
smdtime: time of receiving heartbeat from SMD last;
selftime: the most current time of FCD being active;
initconn: Initial connection from SMD to FCD;
  initconn=1, initial value is 1;
downtime: suppose server restart time is 30s;

select selftime from fcd_state_table where id=1;
downtime=currenttime - selftime;
update fcd_state_table set selftime=currenttime where id=1;

PROCEDURE: MAIN
  socket();
  bind();
  listen();
  while true do
    accept();  //waiting for connect from SMD
    pthread_create(THREAD);
  done
END PROCEDURE

PROCEDURE: THREAD
  receive guestname from SMD;
  select normterm from user_table where username=guestname;
  select processid from process_table where username=guestname and state=active and exectime≈current;

  while true do //communication between FCD & SMD
    select smdtime from user_table where username=guestname;
    period=-1; //used to determine whether SMD access FCD continuously
    if receive heartbeat from SMD then
      period=currenttime - smdtime;
    end if
    update user_table set smdtime=currenttime where username=guestname;
    if 0< period< 8 or initconn then //normal visits
      send heartbeat to SMD;
      send information for current process to SMD;
      initconn=0;
    end if
    if receive finish from SMD then //normal termination
      update user_table set normterm=1 where username=guestname;
      exit; //guest finished his tasks
    end if
    //server restart, process is not normal end
    //after disconnect, SMD reconnect FCD
    if downtime > 30 and !normterm or receive reconnect from SMD then
      FCD receive current process information from SMD;
      update correlative tables where processid=processid;
    end if
    sleep 1s;
  done
END PROCEDURE






阅读(664) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~