双机热备
来源:互联网 发布:oracle linux 内核 编辑:程序博客网 时间:2024/05/01 19:37
http://www.cnblogs.com/skykang/archive/2011/01/20/1940289.html
1.
1.1. 实现双机热备
1.1 实现思路
1.1.1 在同一局域网的两台服务器上各自同时运行服务程序,其中一台为主,另外一台为辅。
1.1.2 启动前,需要在配置文件中分别设置各个服务器为主还是为辅。配置文件中也要设置各服务器的ip地址和端口。
1.1.3 运行时,主服务器(简称PS)执行数据采集任务,同时定时向辅助服务器(简称AS)发送指令,表示PS运行正常。
1.1.4 运行时,AS会收到来自PS的状态指令,当超过超时时间没有得到指令,就认为PS停止工作。这时将AS切换为PS,同时启动数据采集服 务。
1.1.5 如果PS收到另外一台PS发来的工作指令,就将自己切换为AS。
1.1.6 提供一个配置界面,方便用户修改配置文件。
2.
SOCKET断线、死机、异常中断的处理方法。
如果碰到断线或者死机,该如何来判断客户端或者服务器断开。.NET本身并没有很好的函数来支持这点。一种方法是采用心跳数据数据的方式,如下:
//采用发送心跳数据的方式来检测断开。但当前未解决客户端的心跳数据问题,故当前仍采用原始方法
uint dummy = 0;
byte[] inOptionValues = new byte[Marshal.SizeOf(dummy) * 3];
BitConverter.GetBytes((uint)1).CopyTo(inOptionValues, 0);
BitConverter.GetBytes((uint)1000).CopyTo(inOptionValues, Marshal.SizeOf(dummy));
BitConverter.GetBytes((uint)1000).CopyTo(inOptionValues, Marshal.SizeOf(dummy) * 2);
client.IOControl(IOControlCode.KeepAliveValues, inOptionValues, null);
//心跳结束
这个client是监听得到的SOCKET,如下:
Socket client = oldserver.EndAccept(iar);
但是我没有找到客户端的心跳处理方式。
故,最终的实现方式有些愚蠢,就是循环发字节为1的空数据,这也是MSDN上的说法,我的实现方式为:
客户端发送空数据到服务器,服务器转发回客户端。客户端和服务器同时有一个线程来处理是否接收到空包数据,如果有,则连接存在,否则连接断开。
3. 如何设置socket 的超时时间设置
Socket firstSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//创建一个Socket
firstSocket.SendTimeout = 500; //发送超时时间设定
firstSocket.ReceiveTimeout = 500; //接受超时时间设定
参考:http://msdn.microsoft.com/zh-cn/library/system.net.sockets.socket.sendtimeout(VS.80).aspx
- 双机热备方案
- 双机热备
- 双机热备初步
- 双机热备
- 双机热备解决方案
- 双机热备
- Mysql双机热备
- 双机热备配置
- 双机热备概述
- 双机热备原理
- mysql 双机热备
- mysql双机热备
- 双机热备
- 双机热备
- 华为双机热备
- Keepalived 双机热备
- 双机热备
- 双机热备
- C 语言中的回车换行符
- 一个图书下载网站
- 连续定义两个变量
- c#实现打印功能,可以设置纸张大小,字体和颜色等
- 开源项目eRedG4_V1.03.1发布了
- 双机热备
- JAAS:java授权与认证服务
- HttpHandlers和HttpModules接口详解
- ASP.NET页面运行机制
- B2B行业门户网站投资回报及风险控制分析
- .net application.restart() 系统实现自动重启
- 向panel中添加linklable
- Session,ViewState用法
- 又是一年回家时