forked from liulongxiao/mpc
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathREADME
More file actions
78 lines (52 loc) · 2.46 KB
/
Copy pathREADME
File metadata and controls
78 lines (52 loc) · 2.46 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
# mmap 进程间通讯
本项目参考和借鉴了[功夫交易系统](https://github.com/taurusai/kungfu)的通讯机制,将功夫中的journal通讯剥离出来,做成了一个IPC的中间件,本项目完全特点是无附加的依赖,直接编译即可运行测试。
*** 此代码并没有经过充分的测试,bug在所难免,后台自动换页操作后续将会实现 ***
# 使用方法
### 启动service 服务
编译后会生成service 可执行程序,此程序对reader和writer进行管理,包括保证每个journal最多只能有一个writer。
### 构建writer
在本项目中,参考功夫,每一个writer只能有一个journal,并且每个journal只可以有一个进程进行写操作,writer构建必须在service启动以后才可以进行,writer构建时会自动尝试链接service并注册writer,如果失败则会抛出异常。以下是writer的构建示例,注意create函数第一个参数是mmap文件存放的文件夹,第二个参数是writer的名称,由于writer只可以有一个journal,所以writer名称和journal名称相同。(此文件在src/writer.cpp中)
```C++
#include <iostream>
#include "communicator/Writer.h"
using std::cout;
using std::endl;
int main() {
auto writer=Writer::create("/home/llx/Documents/trading/testjournal","testj5");
for(int i=0;i<=100;++i) {
usleep(10000000);
writer->WriteFrame(static_cast<void *>(&i), sizeof(int));
}
return 0;
}
```
### 构建reader
本项目中每一个reader可以有多个journal,每次读取时将寻找最近更新的journal的frame。注意由于reader可以拥有多个journal,所以创建reader时回向service注册reader,但是需要手动添加journal。每次readFrame后会自动进行刷新操作。(此文件在src/reader.cpp中)使用reader-readFrame会返回一个指针,当不存在数据时为 nullptr;
```C++
#include <iostream>
#include "communicator/Reader.h"
using std::cout;
using std::endl;
int main() {
auto reader=Reader::create("testReader");
reader->addJournal("/home/llx/Documents/trading/testjournal","testj5");
while(true){
auto frameptr= static_cast<FrameHeader *> (reader->readFrame());
if(frameptr== nullptr)
continue;
else{
long duration=getNanoTime()-frameptr->nano;
std::cout<<"time duration:"<<duration <<std::endl;
}
}
return 0;
}
```
### 编译样例
```
cd src
mkdir build
cd build
cmake ..
make
```