发起同步命令格式:
1
2
3
4
5
6
7
8
9
10
+---------------------------+
| size(3B) |
| packet_no(1B) |
+---------------------------+
| COM_BINLOG_DUMP(1B) |
| binlog_offset(4B) |
| binlog_flags(2B) |
| server_id=1(4B) |
| binlog_filename |
+---------------------------+
而后注册读报文头部操作(GET_NEXT_PACKET_HEADER),异步回调函数是Binlog_tcp_driver::handle_net_packet_header。最后开启新的线程,线程体是Binlog_tcp_driver::Binlog_tcp_event_loop。线程体主要就一个功能,调用io_service.run()。这样,异步读取报文过程就打开了。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
+-----------------------+
| size(3B) |
| packet_no(1B) |
+-----------------------+
| marker(1B) |
| timestamp(4B) |
| typecode(1B) |
| server_id(4B) |
| event_length(4B) |
| next_postion(4B) |
| flags(2B) |
+-----------------------+
| Event_body |
+-----------------------+
marker是不算在头部的event_length里面的,所以整个的消息体大小应该是event_length-HEADER_SIZE(20)+1.
成功解析报文完成,放入队列中等待客户程序取出这个事件。之后开始异步读取下一个事件的头部。需要注意的是,客户程序需要完成事件数据结构在内存中的销毁。
阅读(2019) | 评论(0) | 转发(0) |