forked from lavina/lavina
Compare commits
2 Commits
e74bd70c89
...
b619ff5f00
Author | SHA1 | Date |
---|---|---|
Nikita Vilunov | b619ff5f00 | |
Nikita Vilunov | e73889d48a |
|
@ -6,6 +6,8 @@ use serde::{Deserialize, Serialize};
|
||||||
use std::net::SocketAddr;
|
use std::net::SocketAddr;
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
|
|
||||||
|
mod broadcast;
|
||||||
|
|
||||||
type Addresses = Vec<SocketAddr>;
|
type Addresses = Vec<SocketAddr>;
|
||||||
|
|
||||||
#[derive(Deserialize, Debug, Clone)]
|
#[derive(Deserialize, Debug, Clone)]
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
/// Receives updates from other nodes and broadcasts them to local player actors.
|
||||||
|
struct Broadcasting {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,31 @@
|
||||||
|
## Step 1 – players and dialogs centralized, rooms distributed
|
||||||
|
All players are located on the same node. The client traffic is terminated on the same node
|
||||||
|
|
||||||
|
Rooms and their history could be located on other nodes.
|
||||||
|
|
||||||
|
The membership data:
|
||||||
|
- If the room and the player are located on the same node, it is on the same node and updated atomically.
|
||||||
|
- If the room and the player are located on different nodes, the membership data is split into two parts:
|
||||||
|
- The player-specific membership contains all data necessary to validate commands on the player's node side.
|
||||||
|
It is located on the player's node.
|
||||||
|
- The room-specific membership contains all data needed to respond to queries such as "list users".
|
||||||
|
It is located on the room's node.
|
||||||
|
|
||||||
|
Dialogs and their history are located on the same node, as all players.
|
||||||
|
|
||||||
|
The allocation is specified statically in the configuration file.
|
||||||
|
|
||||||
|
## Step 2 – players and dialogs distributed
|
||||||
|
Different players could be located on different nodes. The traffic is still terminated on the same node.
|
||||||
|
A client must connect to the node which hosts the player, otherwise the connection is terminated.
|
||||||
|
|
||||||
|
Dialogs are located on the first player's node. This depends on how the first player is decided,
|
||||||
|
which is implemented by sorting the players lexicographically.
|
||||||
|
|
||||||
|
The allocation is still specified statically in the configuration file.
|
||||||
|
|
||||||
|
## Step 3 – dynamic allocation and consensus
|
||||||
|
|
||||||
|
## Step 4 – all data replicated
|
||||||
|
|
||||||
|
## Step 5 – chat history fragmented
|
Loading…
Reference in New Issue