Chinaunix首页 | 论坛 | 博客
  • 博客访问: 220057
  • 博文数量: 53
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1506
  • 用 户 组: 普通用户
  • 注册时间: 2013-07-25 10:52
文章分类
文章存档

2014年(22)

2013年(31)

我的朋友

分类: Mysql/postgreSQL

2014-01-21 17:43:36

发起同步命令格式:    
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.


成功解析报文完成,放入队列中等待客户程序取出这个事件。之后开始异步读取下一个事件的头部。需要注意的是,客户程序需要完成事件数据结构在内存中的销毁。
阅读(1983) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~