@@ -6,3 +6,79 @@ In contrast to MPI, this crates allows for more flexible communication patterns
6
6
The underlying protocol is session based which allows nodes to join and leave at any time.
7
7
One node explicitly takes over the role of the session coordinator and is responsible for creating the session.
8
8
All other nodes must join the session as a member.
9
+
10
+ ## Getting Started
11
+ If you use Rust you can add camure as dependency using:
12
+ ``` sh
13
+ cargo add camure
14
+ ```
15
+ If you want to use the library from languages other than Rust, please take a look at [ camure-ffi] ( https://github.com/soehrl/camure-ffi ) .
16
+
17
+ Below are a few examples that will get you started quickly.
18
+ The full documentation can be found [ here] ( https://docs.rs/camure/ ) .
19
+
20
+ ### Barrier Groups
21
+ #### Coordinator
22
+ ``` rust
23
+ use camure :: session :: Coordinator ;
24
+
25
+ let bind_addr = " 192.168.0.100:12345" . parse ()? ;
26
+ let multicast_addr = " 234.0.0.0:55555" . parse ()? ;
27
+ let coordinator = Coordinator :: start_session (bind_addr , multicast_addr )? ;
28
+
29
+ let mut barrier_group_coordinator = coordinator . create_barrier_group (Some (0 ))? ;
30
+ barrier_group_coordinator . accept ()? ;
31
+
32
+ for _ in 0 .. 1000 {
33
+ barrier_group_coordinator . wait ()? ;
34
+ }
35
+ ```
36
+ #### Member
37
+ ``` rust
38
+ use camure :: session :: Member ;
39
+
40
+ let coordinator_addr = " 192.168.0.100:12345" . parse ()? ;
41
+ let member = Member :: join_session (coordinator_addr )? ;
42
+
43
+ let mut barrier_group_member = member . join_barrier_group (0 )? ;
44
+ for _ in 0 .. 1000 {
45
+ barrier_group_member . wait ()? ;
46
+ }
47
+ ```
48
+
49
+ ### Broadcast Groups
50
+ #### Coordinator
51
+ ``` rust
52
+ use camure :: session :: Coordinator ;
53
+ use std :: io :: Write ;
54
+
55
+ let bind_addr = " 192.168.0.100:12345" . parse ()? ;
56
+ let multicast_addr = " 234.0.0.0:55555" . parse ()? ;
57
+ let coordinator = Coordinator :: start_session (bind_addr , multicast_addr )? ;
58
+
59
+ let mut sender = coordinator . create_broadcast_group (Some (0 ))? ;
60
+ sender . accept (). unwrap ();
61
+
62
+ for _ in 0 .. 1000 {
63
+ sender . write_message (). write_all (b " SOME DATA" )? ;
64
+ }
65
+ sender . wait ()? ;
66
+ ```
67
+ #### Member
68
+ ``` rust
69
+ use camure :: session :: Member ;
70
+ use std :: io :: Read ;
71
+
72
+ let coordinator_addr = " 192.168.0.100:12345" . parse ()? ;
73
+ let member = Member :: join_session (coordinator_addr )? ;
74
+
75
+ let mut receiver = member . join_broadcast_group (0 ). unwrap ();
76
+
77
+ for _ in 0 .. 1000 {
78
+ let mut buf = String :: new ();
79
+ let message = receiver . recv ()? ;
80
+ let mut message_reader = message . read ();
81
+ message_reader . read_to_string (& mut buf )? ;
82
+ println! (" {}" , buf );
83
+ }
84
+ ```
0 commit comments