2014-04-11 5 views
0

는 내가 찾던 대해 S. 로트의 좋은 해답을 발견 :클라이언트 - 서버 동기화

Client-server synchronization pattern/algorithm?

을하지만 내 질문은 클라이언트가 잘못된 시간이 어떤 경우에, 지금?

여기 내 문제입니다 :

이의 클라이언트의 시간이 서버 뒤에 1 시간 가정 해 봅시다, 클라이언트는 파일을 변경, 그래서 마지막으로 쓴 시간은 1 시간 서버 뒤에 지금이다. 사용자가 파일을 동기화하는 프로그램을 시작하면 서버는 변경된 파일에 다음과 같이 말합니다. "아, 그 파일은 내 파일보다 1 시간 이상 오래되었으므로 바꾸자."하지만 사용자 파일이 실제로 최신 버전이므로 서버에 업로드해야합니다.

서버 또는 클라이언트에서 파일이 최신인지 확인하고 시간이 잘못되었거나 다른 경우 파일이 작동하지 않는 시스템이 필요합니다.

아이디어가 있으십니까?

그런데 클라우드 프로그램을 작성하려고합니다.

답변

0

수동으로 충돌을 해결할 경우 (이는 대부분의 응용 프로그램에서 의미가있을 수 있음) 시간 소인이 아닌 버전 관리를 사용하면 더 잘 수행 될 수 있습니다. 클라이언트가 파일을 수정하면 플래그를 설정하십시오. 동기화 할 때 플래그와 버전을 확인하십시오.

  • 클라이언트 플래그가 설정되고 클라이언트와 서버 버전이 같으면 클라이언트 파일을 서버로 보냅니다.

  • 클라이언트 플래그가 설정되어 있지 않고 서버 버전이 최신 인 경우 서버 파일을 클라이언트에 보냅니다.

  • 클라이언트 플래그가 설정되어 있고 서버 버전이 최신 버전 인 경우 충돌이 발생하여 해결해야합니다.

버전은 파일 단위이며 파일과 함께 보내야합니다.

동기화 후 모든 클라이언트 플래그를 재설정하십시오.


이 '플래그'단지 파일의 마지막 수정 시간은 해당 파일이 서버에서 수신 된 시간이 다른 여부를 체크 할 수 있습니다 (우리는 오른쪽에서 파일을받은 후 별도로 시간을 저장할 수 있습니다 섬기는 사람).


또는 시간을 동기화 할 수 있습니다.

여기서 하나의 가능한 해결책이다 :

서버로부터 파일을 수신 할 경우, 먼저, 각 파일의 타임 스탬프는 서버와 클라이언트 시간의 차이에 의해 클라이언트 측에서 수신 오프셋 서버에서 현재 시간을 얻는 . 서버에 파일을 보낼 때 클라이언트 시간만큼 오프셋하여 비슷한 작업을 수행 할 수 있습니다.

그러나 이것은 필요 이상으로 복잡해 보입니다.

+0

답변 해 주셔서 감사합니다.그러나 사용자가 무언가를 변경하면 프로그램이 실행되지 않으면 아무런 플래그도 설정할 수 없습니다. – schacker22

+0

'플래그'는 파일의 마지막 수정 시간이 파일에서 수신 된 시간과 다른지 여부를 확인할 수 있습니다 서버 - 그러면 프로그램이 지속적으로 실행될 필요가 없습니다. – Dukeling

관련 문제