发起同步命令格式:
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.
成功解析报文完成,放入队列中等待客户程序取出这个事件。之后开始异步读取下一个事件的头部。需要注意的是,客户程序需要完成事件数据结构在内存中的销毁。