论文部分内容阅读
摘要:软件更新几乎所有的应用都会使用到,可是大多数软件更新的时候,可能无法使用当前的应用,尤其是一些监控领域,可能即需要软件更新,也不能中断监控信息,否则可能会失去一些重要的监控数据,所以文章提出一种方法,实现即不中断通信传输,又可以实现软件的安全更新。
关键词:软件更新;不中断通信
中图分类号:TN965.8文献标识码:A文章编号:1006-8937(2011)08-0100-01
软件更新是软件不断完善的重要步骤,在传统软件更新过程,可能无法使用当前系统的全部的功能,即使可以使用全部功能,但涉及到通信的模块,也可能会中断;但有些特殊领域,往往不可以中断通信,一旦中断通信,可能会无法及时与其它主机或者服务器进行通信,可能会造成资产等重要信息丢失,针对这一问题,文章研究一种方法可以实现软件的安全更新,也可以保证通信不中断,保证数据的安全可靠。
1普通更新方法
普通的程序方法,一般采用服务器对客户端发送更新指令,然后客户端会接收指令,然后启动新的线程,进行文件传输,当文件传输结束后,客户机选择提示用户是否进行程序更新,如果更新则会退出主程序,然后运行更新后的程序,此时假设客户机还会与另一服务器发送一些实时信息,当原始进程中断的时候,通信就会关闭,则更新的这段时间的信息将无法全部发送给指定的服务器。具体过程参见图1。
2不中断通信下更新方法
针对普通更新方法中存在中断通信的问题,提出文章的更新软件思想,就是在普通的更新基础上,当更新包接收完成后,可以想办法将主进程所有正在通信的套接字转移给新的版本进程,这样就可以让新的进程来接管原始通信,也就能保证通信不中断,参见图2,具体的过程如下:①服务端下发更新指令。②客户端启动新的线程去连接服务端特定的端口。③服务端发送更新包。④客户端接收更新包,但更新包接收完毕后,启动新版本的程序,并监听某一端口,等待传递通信套接字。⑤新版本程序启动后,即可请求老版本的进程传递通信套接字,接收完毕后可以通知老版本进程不要再通信了,然后接管与服务端的通信,通信正常接收后可以kill原始进程。
在Linux系统下可以通过sendmsg与recvmsg两个函数实现不同进程之间传递套接字,Windows系统下可以通过WSADuplicateSocket函数实现此功能。因为如果直接使用共享内存或者消息队列等进程间通信的方式来将套接字传递给对方,这样是行不通的,因为套接字在一个进程内的值,与在系统内实际的值是不一样的,在应用与系统之间存在一个转换,但是使用上述两个函数,就可以保证传输后是可以直接与系统内核对应的值。
3结语
通过文章所述方法,可以在不中断通信的基础上实现程序的更新,这种方式可保证程序的易用性,也能保证信息的可靠性。但是在本方法的基础上,还需要在程序中对于何时移交套接字,以及何時让原始进程停止读套接字内的流,做一些处理。
参考文献:
[1] CSDN.如何在多进程里共享socket[DBOL].http://topic.csdn. net,2003-01-18.
注:本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文
关键词:软件更新;不中断通信
中图分类号:TN965.8文献标识码:A文章编号:1006-8937(2011)08-0100-01
软件更新是软件不断完善的重要步骤,在传统软件更新过程,可能无法使用当前系统的全部的功能,即使可以使用全部功能,但涉及到通信的模块,也可能会中断;但有些特殊领域,往往不可以中断通信,一旦中断通信,可能会无法及时与其它主机或者服务器进行通信,可能会造成资产等重要信息丢失,针对这一问题,文章研究一种方法可以实现软件的安全更新,也可以保证通信不中断,保证数据的安全可靠。
1普通更新方法
普通的程序方法,一般采用服务器对客户端发送更新指令,然后客户端会接收指令,然后启动新的线程,进行文件传输,当文件传输结束后,客户机选择提示用户是否进行程序更新,如果更新则会退出主程序,然后运行更新后的程序,此时假设客户机还会与另一服务器发送一些实时信息,当原始进程中断的时候,通信就会关闭,则更新的这段时间的信息将无法全部发送给指定的服务器。具体过程参见图1。
2不中断通信下更新方法
针对普通更新方法中存在中断通信的问题,提出文章的更新软件思想,就是在普通的更新基础上,当更新包接收完成后,可以想办法将主进程所有正在通信的套接字转移给新的版本进程,这样就可以让新的进程来接管原始通信,也就能保证通信不中断,参见图2,具体的过程如下:①服务端下发更新指令。②客户端启动新的线程去连接服务端特定的端口。③服务端发送更新包。④客户端接收更新包,但更新包接收完毕后,启动新版本的程序,并监听某一端口,等待传递通信套接字。⑤新版本程序启动后,即可请求老版本的进程传递通信套接字,接收完毕后可以通知老版本进程不要再通信了,然后接管与服务端的通信,通信正常接收后可以kill原始进程。
在Linux系统下可以通过sendmsg与recvmsg两个函数实现不同进程之间传递套接字,Windows系统下可以通过WSADuplicateSocket函数实现此功能。因为如果直接使用共享内存或者消息队列等进程间通信的方式来将套接字传递给对方,这样是行不通的,因为套接字在一个进程内的值,与在系统内实际的值是不一样的,在应用与系统之间存在一个转换,但是使用上述两个函数,就可以保证传输后是可以直接与系统内核对应的值。
3结语
通过文章所述方法,可以在不中断通信的基础上实现程序的更新,这种方式可保证程序的易用性,也能保证信息的可靠性。但是在本方法的基础上,还需要在程序中对于何时移交套接字,以及何時让原始进程停止读套接字内的流,做一些处理。
参考文献:
[1] CSDN.如何在多进程里共享socket[DBOL].http://topic.csdn. net,2003-01-18.
注:本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文