文档会议服务器与终端的通信处理方法转让专利

申请号 : CN201310383609.7

文献号 : CN103581290A

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 何宗乐林福国

申请人 : 国家电网公司国网福建省电力有限公司国网福建省电力有限公司信息通信分公司

摘要 :

本发明涉及一种文档会议服务器与终端的通信处理方法,其特征在于包括以下步骤:步骤S01:第一终端通过登录与所述文档会议服务器建立连接;步骤S02:所述文档会议服务器通过WebAPP向第一终端推送文档信息,同时该第一终端向WebAPP发送Json格式的同步请求信息;WebAPP将Json格式的文档信息推送至同步的第二终端;步骤S03:若此时第二终端与第一终端是异步状态,则第二终端拒绝接收SocketServer发送的文档,直接从WebAPP中获取自己想要的文档信息;步骤S04:若所述文档会议服务器没有收到所述心跳包,则认为此时第一终端是假链接,该文档会议服务器关闭与第一终端之间的对话。本发明用以实现会议中同步会议内容或者异步查看其他会议资料,具备灵活性高、可靠等特点。

权利要求 :

1.一种文档会议服务器与终端的通信处理方法,其特征在于包括以下步骤:

步骤S01:第一终端通过登录与所述文档会议服务器建立连接,所述第一终端以一预定时间间隔向所述文档会议服务器发送心跳包;

步骤S02:所述文档会议服务器通过WebAPP向第一终端推送文档信息,同时该第一终端向WebAPP发送Json格式的同步请求信息;WebAPP将数据包发送给SocketServer,该SocketServer则将Json格式的文档信息推送至同步的第二终端;

步骤S03:若此时第二终端与第一终端是异步状态,则第二终端拒绝接收SocketServer发送的文档,直接从WebAPP中获取自己想要的文档信息;

步骤S04:若所述文档会议服务器没有收到所述心跳包,则认为此时第一终端是假链接,该文档会议服务器关闭与第一终端之间的对话。

2.根据权利要求1 所述的文档会议服务器与终端间的通信处理方法,其特征在于,所述心跳包是终端生成的一个独立包,通过http协议与文档会议服务器进行心跳通知,且按系统设置的时间间隔确定的心跳通知。

3.根据权利要求2所述的文档会议服务器与终端间的通信处理方法,其特征在于:所述心跳包是由Socket库提供的心跳检测机制,设置接口为setsockopt API。

4.根据权利要求1 所述的文档会议服务器与终端的通信处理方法,其特征在于:所述步骤S02中,所述SocketServer采用广播的机制将Json格式的文档信息推送至同步的第二终端。

说明书 :

文档会议服务器与终端的通信处理方法

技术领域

[0001] 本发明涉及一种通信技术领域,特别是一种文档会议服务器与终端间的通信处理方法。

背景技术

[0002] 会议是公司各个管理领域和各项业务环节的重要分析决策活动,在加快建设现代公司管理中的支撑和引领作用不断加强,要求公司业务运营分析能力由壁垒向协同、分散向集中、自发向可控、孤岛向共享的转变。从公司角度来说需建设一套可统揽全局、简易智能的互动会议系统,为公司领导及时全面掌握生产经营情况、进行科学分析提供依据。互动会议系统有一下几项功能要求:系统稳定性要求比较高;客户端操控简单便捷;客户端可即时分享会议中的演讲文档提高会议效率和质量。所以互动会议系统设计方向之一满足上述三点功能要求的同时,对文档服务器与客户端之间的通信过程的可靠性和灵活性提出了更高的要求。然而现有的文档服务器与客户端之间的通信可靠性和灵活性满足不了客户的需求,导致开会时,经常出现链接错误、文件遗失或者搜索不到的问题。

发明内容

[0003] 有鉴于此,本发明的目的是一种可靠、灵活的文档会议服务器与终端间的通信处理方法。
[0004] 本发明采用以下方案实现:一种文档会议服务器与终端的通信处理方法,其特征在于包括以下步骤:步骤S01:第一终端通过登录与所述文档会议服务器建立连接,所述第一终端以一预定时间间隔向所述文档会议服务器发送心跳包;
步骤S02:所述文档会议服务器通过WebAPP向第一终端推送文档信息,同时该第一终端向WebAPP发送Json格式的同步请求信息;WebAPP将数据包发送给SocketServer,该SocketServer则将Json格式的文档信息推送至同步的第二终端;
步骤S03:若此时第二终端与第一终端是异步状态,则第二终端拒绝接收SocketServer发送的文档,直接从WebAPP中获取自己想要的文档信息;
步骤S04:若所述文档会议服务器没有收到所述心跳包,则认为此时第一终端是假链接,该文档会议服务器关闭与第一终端之间的对话。
[0005] 在本发明一实施例中,所述心跳包是终端生成的一个独立包,通过http协议与文档会议服务器进行心跳通知,且按系统设置的时间间隔确定的心跳通知。 [0006] 在本发明一实施例中,所述心跳包是由Socket库提供的心跳检测机制,设置接口为setsockopt API。
[0007] 在本发明一实施例中,所述步骤S02中,所述SocketServer采用广播的机制将Json格式的文档信息推送至同步的第二终端。
[0008] 本发明还能够达到下面的三个有益效果:1)流保活功能,如果客户端的网络环境异常,发生断网情况,文档服务器能及时发现,并停止对其进行服务,避免服务器资源浪费;
2)任何要访问实现了本发明所述的文档服务器系统的客户端,必须要实现本发明所述的心跳机制,使得客户端与服务器之间的通信可靠性得到很大的提高;
3)本发明中的同步和异步机制实现了文档的灵活展示查看,提高了会议质量和效率。

附图说明

[0009] 图1是本发明方法流程示意图。

具体实施方式

[0010] 下面结合附图及实施例对本发明做进一步说明。
[0011] 本发明实施例,一种文档会议服务器与终端的通信处理方法,其特征在于包括以下步骤:步骤S01:第一终端通过登录与所述文档会议服务器建立连接,所述第一终端以一预定时间间隔向所述文档会议服务器发送心跳包;
步骤S02:所述文档会议服务器通过WebAPP向第一终端推送文档信息,同时该第一终端向WebAPP发送Json格式的同步请求信息;WebAPP将数据包发送给SocketServer,该SocketServer则将Json格式的文档信息推送至同步的第二终端;
步骤S03:若此时第二终端与第一终端是异步状态,则第二终端拒绝接收SocketServer发送的文档,直接从WebAPP中获取自己想要的文档信息;
步骤S04:若所述文档会议服务器没有收到所述心跳包,则认为此时第一终端是假链接,该文档会议服务器关闭与第一终端之间的对话。
[0012] 具体的,请参见图1,本实施例提供一种文档会议服务器与客户端间的通信处理方法,包括以下步骤:a、 客户端通过登录与服务器建立连接,客户端和服务器设定心跳包发送的时间间隔,并将此时间间隔嵌入心跳包,按照该时间间隔终端向服务器端发送心跳包,若服务器端按照此时间间隔收到心跳包,则链路畅通;
b、 服务器通过WebAPP向客户端1推送文档信息,同时客户端1向WebAPP发送Json格式的同步请求信息;WebAPP将数据包发送给SocketServer,SocketServer采用广播的机制将Json格式的文档信息推送至同步的客户端2;
c、 若此时客户端2与客户端1异步状态,则客户端2拒绝接收SocketServer发送的文档,直接从WebAPP中获取自己想要的文档信息;
d、 若客户端此时间间隔没有收到心跳包,则认为此时客户端是假链接,服务器端关闭与之假链接的客户端之间的对话。
[0013] 在本发明一实施例中,所述心跳包的时间间隔是人为设定的时间值。
[0014] 下面是客户端心跳包核心代码:# region ++++++++++++++++++++ 客户端的感觉系统
//启动记时器
public void BeginTheTimer()
{
//th_UserLogin();
object myobject = (object)7;
//暂时设定为1秒钟启动一次!
System.Threading.Timer t = new System.Threading.Timer
(new System.Threading.TimerCallback(testTheNet), myobject, 1000, 1000);
}
//启动监视"已登录用户通信情况"的线程
public void testTheNet(object myobject)
{
//UserPassport up=new UserPassport();
ThreadsendMyPulseThPro=newThread(new ThreadStart(delegateSendMyPulse));
sendMyPulseThPro.Start();
}
///
/// 每隔1秒都要来做这些事情
///

public void delegateSendMyPulse()
{
loginServer lser = new loginServer();
Login l = new Login();
l.Id = lser.MyLogin.Id;
l.ClientTypeVersion = version;
l.RequestType = 3;
//3是确认联接正常的一个信号(让服务知道它与服务器的联接是正常的)loginServer lserver = new loginServer();
//启动一个新线程去发送数据
Thread thSendDat2 = new Thread
(new ParameterizedThreadStart(lserver.delgSendDataMethod));
thSendDat2.Start(l);
thSendDat2.IsBackground = true;
//标记已经发送出去一次数据了
longinserver.MyLostTime += 1;
//如果外发了3次请求暗号后仍不见服务器的回应,则认为客户端已经与服务器断开联系了
if(longinserver.MyLostTime>=3)
{
//停止Timer
//告诉用户:“已经与服务器失去联系了…………”
longinserver.Controls["txtShowMsg"].Text = "You have lost the connect!";
}
}
# endregion +++++++++++++++++++++ 客户端的感觉系统
下面是服务器端核心代码如下:
# region +++++++++++++++++++++++ 服务器的感觉系统
//启动记时器
public void LoadTheTimer()
{
object o=(object)loginedCount++;
UserPassport up = new UserPassport();
//暂时设定为1秒钟启动一次!
System.Threading.Timer t = new System.Threading.Timer
(new System.Threading.TimerCallback(watchTheLoginUser), o, 1000, 1000); }
//启动监视"已登录用户通信情况"的线程
public void watchTheLoginUser(object o)
{
//UserPassport up=new UserPassport();
Thread checktheloginuser = new Thread(new ThreadStart(iAmAWatcher));
checktheloginuser.Start();
}
//每隔1秒钟后就查看一下通信状态
//registry里面有没有定时来向服务器报到,如果出现哪个客户端三次检查都没有签到则除之名
public void iAmAWatcher()
{
this.txtLogin.Text += "@+";
int index = 0;
for (index = 0; index < loginedCount; index++)
{
if (myRegistry[index].alive==false&®istry[index].studentID!=""){
lock(this)
{
//坏(未到)记录增加一次
myRegistry[index].no_check_in_count += 1;
if (myRegistry[index].no_check_in_count >= 3)
{
//this.lblShowMsg.Text = "the student"
//this.lblShowMsg.Text += registry[index].studentID.ToString() //this.lblShowMsg.Text += "is diaoxianle!";
this.txtLogin.Text += "88";
//标记该客户端已经与服务器失去连接了,因为已经连续3次的未到记录存在registry[index].studentID = "";
registry[index].StudentName = "";
registry[index].StudentIP = "";
registry[index].status = 2; //掉线
}
}
}
}
} //定时检查在线客户端的目前状态
# endregion +++++++++++++++++++ 服务器的感觉系统
2、所述同步和异步机制是客户端是否接收SocketServer广播的文档信息。
[0015] /***************************************** 方法名称: - synchronous
* 功能描述:同步方法
* 输入参数:无
* 返回值:无
* 其它说明:
****************************************/
- (void)synchronous
{
isAsyn = 0;
[meet_view controlSwipeEvent:isAsyn];
[HUIView beginAnimations:nil context:nil];
[HUIView setAnimationDuration:0.5];
toolBar_view.alpha = 0;
small_view.alpha = 0;
[HUIView commitAnimations];
[meet_view jumpPdfPage:[page_vo.pageNo integerValue]];
}
/****************************************
* 方法名称: - notSync
* 功能描述:不同步
* 输入参数:无
* 返回值:无
* 其它说明:
****************************************/
- (void)notSync
{
isAsyn = 1;
[meet_view controlSwipeEvent:isAsyn];
[HUIView beginAnimations:nil context:nil];
[HUIView setAnimationDuration:0.5];
toolBar_view.alpha = 1;
small_view.alpha = 1;
[HUIView commitAnimations];
ICSLog(@"small_view = %@", small_view);
}
/**************************************** * 方 法 名 称:-
changeListenCurrentPage * 功能描述:监听socket发送的信息 改变听讲者当前界面显示。 * 输入参数:监听到的当前会议信息 * 返回值: * 其它说明: ****************************************/ - (void)changeListenCurrentPage:(NSNotification*) notification { ICSLog(@"1111self.meetDataVO.fId =====%@",self.meetDataVO.fId); //获取听讲者获取的主持人发出的jsonstring NSString *jsonFromHost = (NSString *)[notification object]; ICSLog(@"听讲人监听到翻页信息的str===%@",jsonFromHost); IndexBO *indexBO = [[IndexBO alloc]init]; CurrentPageVO *currPage_vo = [indexBO getHostMeetData:jsonFromHost]; self.page_vo = currPage_vo; [currPage_vo release]; currPage_vo = nil; [indexBO release]; //判断是否在同一会议中 if([page_vo.cId isEqualToString:[GlobalInfo getInstanceGlobal].cid]) { //判断是否切换了ppt ICSLog(@"meetDataVO.fId====%@ page_vo.fileID=====%@",meetDataVO.fId,page_vo.fileID); ICSLog(@"self.meetDataVO.fId =====%@",self.meetDataVO.fId); if([self.meetDataVO.fId isEqualToString:page_vo.fileID]) { if(isAsyn == 0) { [meet_view jumpPdfPage:[page_vo.pageNo integerValue]]; } } //切换ppt后需要开启后台去解析新的数据 else { ICSLog(@"切换PPT"); DicVO *dicVO = [[DicVO alloc]init]; dicVO.methodName = MEET_M_CHANGEPDF; NSArray *meetData_arr = [GlobalInfo getInstanceGlobal].conferenceDataArr; ICSLog(@"保存 的会议 信息=====%@ =====%@",[GlobalInfo getInstanceGlobal].conferenceDataArr,self.meetDataVO); for(int i=0;i<[meetData_arr count];i++) { ConferenceDataVO *vo = [meetData_arr objectAtIndex:i]; if([vo.fId isEqualToString:page_vo.fileID]) { ICSLog(@"找到的当前会议资料====%@",vo.fId); self.meetDataVO = vo; dicVO.obj = meetDataVO.fileName; isAsyn = 0; break; } } if(dicVO.obj != nil) { [meet_view removeFromSuperview]; meet_view = nil; meet_view = [[MeetView alloc] initWithFrame:CGRectMake(0, 0, 1024, 748)]; meet_view.meet_service = self; [self.view addSubview:meet_view]; [meet_view release]; [self
performSelectorInBackground:@selector(backOperation:) withObject:dicVO]; [dicVO release]; } else { [meet_view showAlert:@"请返回刷新资料!"]; } } } 。
[0016] 以上所述仅为本发明的较佳实施例,凡依本发明申请专利范围所做的均等变化与修饰,皆应属本发明的涵盖范围。