All Projects → sile → erl_dist

sile / erl_dist

Licence: MIT license
Rust Implementation of Erlang Distribution Protocol

Programming Languages

rust
11053 projects

Projects that are alternatives of or similar to erl dist

Clearly
Clearly see and debug your celery cluster in real time!
Stars: ✭ 287 (+160.91%)
Mutual labels:  asynchronous, distributed
Galaxy
Galaxy is an asynchronous parallel visualization ray tracer for performant rendering in distributed computing environments. Galaxy builds upon Intel OSPRay and Intel Embree, including ray queueing and sending logic inspired by TACC GraviT.
Stars: ✭ 18 (-83.64%)
Mutual labels:  asynchronous, distributed
Coerce Rs
Coerce - an asynchronous (async/await) Actor runtime and cluster framework for Rust
Stars: ✭ 231 (+110%)
Mutual labels:  asynchronous, distributed
Circuits
circuits is a Lightweight Event driven and Asynchronous Application Framework for the Python Programming Language with a strong Component Architecture.
Stars: ✭ 256 (+132.73%)
Mutual labels:  asynchronous, distributed
Transmittable Thread Local
📌 TransmittableThreadLocal (TTL), the missing Java™ std lib(simple & 0-dependency) for framework/middleware, provide an enhanced InheritableThreadLocal that transmits values between threads even using thread pooling components.
Stars: ✭ 4,678 (+4152.73%)
Mutual labels:  asynchronous, distributed
Bastion
Highly-available Distributed Fault-tolerant Runtime
Stars: ✭ 2,333 (+2020.91%)
Mutual labels:  asynchronous, distributed
elfo
Your next actor system
Stars: ✭ 38 (-65.45%)
Mutual labels:  asynchronous, distributed
blackhole
Blackhole is an MTA written on top of asyncio, utilising async and await statements that dumps all mail it receives to /dev/null.
Stars: ✭ 61 (-44.55%)
Mutual labels:  asynchronous
WebsocketPromisify
Makes websocket's API just like REST with Promise-like API, with native Promises.
Stars: ✭ 18 (-83.64%)
Mutual labels:  asynchronous
goimpulse
高可用,高性能的分布式发号服务
Stars: ✭ 17 (-84.55%)
Mutual labels:  distributed
tgcalls
Voice chats, private incoming and outgoing calls in Telegram for Developers
Stars: ✭ 408 (+270.91%)
Mutual labels:  asynchronous
rockgo
A developing game server framework,based on Entity Component System(ECS).
Stars: ✭ 617 (+460.91%)
Mutual labels:  distributed
nautilus.js
[separated fork] Async JavaScript loader & dependency manager in ~600B [gziped]
Stars: ✭ 59 (-46.36%)
Mutual labels:  asynchronous
StateBuilder
State machine code generator for C++ and Java.
Stars: ✭ 30 (-72.73%)
Mutual labels:  asynchronous
drone-stm32-map
STM32 peripheral mappings for Drone, an Embedded Operating System.
Stars: ✭ 16 (-85.45%)
Mutual labels:  asynchronous
WeIdentity
基于区块链的符合W3C DID和Verifiable Credential规范的分布式身份解决方案
Stars: ✭ 1,063 (+866.36%)
Mutual labels:  distributed
dask-sql
Distributed SQL Engine in Python using Dask
Stars: ✭ 271 (+146.36%)
Mutual labels:  distributed
heat
Distributed tensors and Machine Learning framework with GPU and MPI acceleration in Python
Stars: ✭ 127 (+15.45%)
Mutual labels:  distributed
SierraChartZorroPlugin
A Zorro broker API plugin for Sierra Chart, written in Win32 C++.
Stars: ✭ 22 (-80%)
Mutual labels:  asynchronous
toy-rpc
Java基于Netty,Protostuff和Zookeeper实现分布式RPC框架
Stars: ✭ 55 (-50%)
Mutual labels:  distributed

erl_dist

erl_dist Documentation Actions Status Coverage Status License: MIT

Rust Implementation of Erlang Distribution Protocol.

The distribution protocol is used to communicate with distributed erlang nodes.

Examples

Gets a node entry from EPMD:

use erl_dist::epmd::{DEFAULT_EPMD_PORT, EpmdClient};

// Connect to the local EPMD.
let connection = TcpStream::connect(("localhost", DEFAULT_EPMD_PORT)).await?;
let client = EpmdClient::new(connection);

// Get the information of a node.
let node_name = "foo";
if let Some(node) = client.get_node(node_name).await? {
    println!("Found: {:?}", node);
} else {
    println!("Not found");
}

Sends a message to an Erlang node:

use erl_dist::LOWEST_DISTRIBUTION_PROTOCOL_VERSION;
use erl_dist::node::{Creation, LocalNode};
use erl_dist::handshake::ClientSideHandshake;
use erl_dist::term::{Atom, Pid};
use erl_dist::message::{channel, Message};

// Connect to a peer node.
let peer_host = "localhost";
let peer_port = 7483;  // NOTE: Usually, port number is retrieved from EPMD.
let connection = TcpStream::connect((peer_host, peer_port)).await?;

// Local node information.
let creation = Creation::random();
let local_node = LocalNode::new("foo@localhost".parse()?, creation);

// Do handshake.
let mut handshake = ClientSideHandshake::new(connection, local_node.clone(), "cookie");
let _status = handshake.execute_send_name(LOWEST_DISTRIBUTION_PROTOCOL_VERSION).await?;
let (connection, peer_node) = handshake.execute_rest(true).await?;

// Create a channel.
let capability_flags = local_node.flags & peer_node.flags;
let (mut tx, _) = channel(connection, capability_flags);

// Send a message.
let from_pid = Pid::new(local_node.name.to_string(), 0, 0, local_node.creation.get());
let to_name = Atom::from("bar");
let msg = Message::reg_send(from_pid, to_name, Atom::from("hello").into());
tx.send(msg).await?;

Example commands:

Related Crates

  • erl_rpc: Erlang RPC client for Rust
  • erldash: Terminal-based Erlang dashboard
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].