發起同步命令格式:
1 [12] COM_BINLOG_DUMP 4 binlog-pos 2 flags 4 server-id string[EOF] binlog-filename
而後註冊讀報文頭部操作(GET_NEXT_PACKET_HEADER),異步回調函數是Binlog_tcp_driver::handle_net_packet_header。最後開啓新的線程,線程體是Binlog_tcp_driver::Binlog_tcp_event_loop。線程體主要就一個功能,調用io_service.run()。這樣,異步讀取報文過程就打開了。
每個事件,都由一個00字節開頭,其後跟長度+marker+公共事件頭+事件體。公共事件頭格式如下,事件體格式事件類型而不同。
4 timestamp 1 event type 4 server-id 4 event-size if binlog-version > 1: 4 log pos 2 flags
整個的消息體大小應該是event_length-19,程序中,19=HEADER_SIZE(20)-1.
成功解析報文完成,放入隊列中等待客戶程序取出這個事件。之後開始異步讀取下一個事件的頭部。需要注意的是,客戶程序需要完成事件數據結構在內存中的銷燬。