크롬 동기화가 클라이언트와 정보를 교환해야 할 때 적어도 레벨에서 xmpp을 사용하는지 모르겠습니다. 그것은 '프로토콜 버퍼'Google 기술을 사용합니다. 프로토콜은 .proto 프로토콜 설명 파일을 사용하여 제공되며 특수 컴파일러를 사용하여 언어 개체로 변환 할 수 있습니다. 동기화 서버는 https://clients4.google.com/chrome-sync에 있으며 클라이언트는 입력 된 ClientToServerMessage 메시지가있는 바이너리 본문과 함께 POST 요청을 보냅니다. 먼저 동기화 서버에 연결할 때의 출력입니다. 첫 번째 출력 파이썬 객체는 HTTP 헤더가있는 'environ'WSGI 변수의 pprint입니다. 두 번째 객체 ('===='다음)는 실제 프로토콜 메시지입니다.
{'CONTENT_LENGTH': '54',
'CONTENT_TYPE': 'application/octet-stream',
'GATEWAY_INTERFACE': 'CGI/1.1',
'HTTP_ACCEPT_CHARSET': 'ISO-8859-1,utf-8;q=0.7,*;q=0.3',
'HTTP_ACCEPT_ENCODING': 'gzip,deflate,sdch',
'HTTP_ACCEPT_LANGUAGE': 'en-US,en;q=0.8',
'HTTP_AUTHORIZATION': 'GoogleLogin auth=MKhiqZsdz2RV4WrUJzPltxc2smTMcRnlfPALTOpf-Xdy9vsp6yUpS5cGuND0awqrYVUK4lhOJlh6OMsg093eBRghGGIgvWUTzU8PUvquy_c8Xn4sRiz_3tVJcke5eXi3q4qFDa6iVuEbT_0QhyPOjIQyeDOKRpZzMR3rpHsAs0ptFiTtUeTHsoIeUFT9nZPYzkET4-yHbDAp45_dxWdb-U6DPg24',
'HTTP_CONNECTION': 'keep-alive',
'HTTP_HOST': 'localhost:8080',
'HTTP_USER_AGENT': 'Chrome MAC 0.4.21.6 (130497)-devel',
'PATH_INFO': '/chrome-sync/dev/command/',
'QUERY_STRING': 'client_id=SOME_SPECIAL_STRING',
'REMOTE_ADDR': '127.0.0.1',
'REMOTE_PORT': '59031',
'REQUEST_METHOD': 'POST',
'SCRIPT_NAME': '',
'SERVER_NAME': 'vian-bizon.local',
'SERVER_PORT': '8080',
'SERVER_PROTOCOL': 'HTTP/1.0',
'SERVER_SOFTWARE': 'gevent/1.0 Python/2.6',
'wsgi.errors': <open file '<stderr>', mode 'w' at 0x100416140>,
'wsgi.input': <gevent.pywsgi.Input object at 0x102a04250>,
'wsgi.multiprocess': False,
'wsgi.multithread': False,
'wsgi.run_once': False,
'wsgi.url_scheme': 'https',
'wsgi.version': (1, 0)}
'==================================='
share: "[email protected]"
protocol_version: 30
message_contents: GET_UPDATES
get_updates {
caller_info {
source: NEW_CLIENT
notifications_enabled: false
}
fetch_folders: true
from_progress_marker {
data_type_id: 47745
token: ""
notification_hint: ""
}
}
debug_info {
events {
type: INITIALIZATION_COMPLETE
}
events_dropped: false
}
이는 OAuth 기반 인증에서 발생합니다. HTTP_AUTHORIZATION 입력란에 OAuth 토큰이 표시됩니다. OAuth 토큰은 HTML 대화 상자 'Google 계정 로그인'과 상호 작용할 때 제공됩니다. 확실하지 않지만 Google 서비스에 대한 액세스 토큰을 얻는 API가 공개적으로 사용 가능한 것으로 보입니다.
것은 당신이 XMPP 인증 대신, 여기서 X-GOOGLE 토큰의 인증 메커니즘의 설명을 참조하시기 바랍니다 찾고 있다면 : https://developers.google.com/talk/jep_extensions/oauth
다음 X-OAUTH2 허가를
Authenticate to Google Talk (XMPP, Smack) using an authToken
을, 당신은 여기에 정보에 액세스 할 수 있습니다
그리고 여기 샘플 : 브라우저의 각 실행에 채워 크롬 로그 파일에 XMPP 스트림 흐름을 추가 할 수 있습니다 http://pits.googlecode.com/svn/trunk/xmpp.c
주 - chrome_debug.log. 이 기능을 사용하려면 다음 옵션으로 Chrome을 실행하십시오. --enable-logging --v = 2
답장을 보내 주셔서 감사합니다! 또한 Chrome을 해당 서버에 연결하는 것으로 나타 났지만 XMPP를 통해 동기화 알림을 구독하거나 해당 클라이언트/브라우저를 동기화 서버에 등록하는 것만으로 생각하십니까? Google 프리젠 테이션에서 XMPP를 통해 탭 동기화를 수행하여 서버로드 및 복잡성을 최소화했습니다 (단지 1 백만 개의 Chrome 브라우저가 동기화 업데이트를 확인하기 위해 매분 서버를 폴링하는 것을 상상해보십시오). 하지만 당신이 옳다고 생각하고 XMPP 메시지가 protobuffs라고 생각합니다. 서버에 연결되자 마자 처리해야 할 것이 있습니다 ... –
Smack을 사용하여 chrome sync xmpp에 연결할 수 있습니까? oauth 토큰은 어떻게 구합니까? – rustyx
@rustyx : 아니, 슬프게도 나는 ... // vians가 지금까지 편집하는 것을 눈치 채지 못했습니다. - 고마워요. –