https://github.com/lexzaiello/melon
:watermelon: A modular peer-to-peer communications library for Java with minimal overhead.
https://github.com/lexzaiello/melon
decentralized framework java maven networking p2p p2p-library
Last synced: 7 months ago
JSON representation
:watermelon: A modular peer-to-peer communications library for Java with minimal overhead.
- Host: GitHub
- URL: https://github.com/lexzaiello/melon
- Owner: lexzaiello
- License: mit
- Created: 2019-09-02T23:37:36.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2020-10-13T15:45:01.000Z (over 5 years ago)
- Last Synced: 2025-08-09T23:52:13.040Z (8 months ago)
- Topics: decentralized, framework, java, maven, networking, p2p, p2p-library
- Language: Java
- Homepage:
- Size: 117 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# melon
:watermelon: Modular peer-to-peer communications library for Java with minimal overhead.
## Introduction
Melon is a modular peer-to-peer communications library for Java. Melon provides
a flexible, dev-oriented API for networking in Java that can be dissected,
reconfigured, and built upon to serve a user's needs.
### Core Components of the Melon Framework
* `Hosts`
The `Host` class is the furthest layer of abstraction that Melon provides.
Hosts serve as fully configured, assembled "kits" of individual building
blocks. By default, a host has a preconfigured configuration, but individual
properties of a host can be changed through options passed in to the `Host`
constructor.
* `Transports`
The `Transport` interface represents any generic network transport.
As of yet, only a `Tcp` transport comes with Melon.
* `Multi-Addresses`
A multiaddress is a way of representing the address, port, and id of a
specific peer. In Melon, multiaddresses are the main method of communicating
internet addresses.
Multiaddresses are usually contain the ip protocol, ip address, transport
protocol, port, and public key of a peer encoded via hexadecimal. For example:
`/ip4/108.41.124.60/tcp/3000/Qmcpo2iLBikrdf1d6QU6vXuNb6P7hwrbNPW9kLAH8eG67z`
* `Peerstores`
A `Peerstore` is the main method of "caching" connections to known peers in
Melon. Once a connection to a peer is established, it is saved in the
`Peerstore.`
* `Pubsub`
Pubsub is a method of message propagation in distributed networks. Melon
implements this functionality through the `SubscriptionManager` class.
An instance of this class is included, by default, in all `Hosts`.
* `Upgrades`
`Upgrades` come in many different forms. The most common kind, transport
upgrades, can add support for all kinds of features to a given transport,
simply by calling `.withUpgrade()`. The `Secio` upgrade, for example,
implements communications encryption for any `Transport`.
* `Options`
When a `Host` is initialized, a user might want to, for example, use a
custom transport for communications. This can be achieved through the use
of the `TransportOption`.
## Getting Started
To start using the Melon framework in your Java application, add Melon as a
dependency in your `Pom.xml` file:
```xml
melon
melon
1.0.0
```
Then, feel free to use the standard Melon `Host`, or construct your own using
any of the predefined `Options` (or make your own)!
### Making a New Host
```java
import com.dowlandaiello.melon.host.Host;
class MelonExample {
public myMethod() {
Host host = new Host(); // Use the default host options
}
}
```
### Initializing a new Host with Options
```java
import com.dowlandaiello.melon.host.Host;
import com.dowlandaiello.melon.host.Host.TransportOption;
import com.dowlandaiello.melon.transport.Tcp;
class MelonExample {
public myMethod() {
Host host = new Host(new TransportOption(new Tcp())); // Initialize a new host with the TCP transport option
}
}
```
### Starting an Initialized Host
```java
import com.dowlandaiello.melon.host.Host;
class MelonExample {
public myMethod() {
Host host = new Host(); // Use the default host options
host.listen(3000); // Listen on port 3000
}
}
```
### Connecting a Host to an Existing Network
```java
import com.dowlandaiello.melon.host.Host;
class MelonExample {
public myMethod() {
Host host = new Host(); // Construct the default host
host.listen(3000); // Listen on port 3000
host.peerstore.bootstrap("/ip4/...", host.transport, host.keypair.getPublic()); // Bootstrap the peerstore from a particular peer
}
}
```
### Publishing a Message
```java
import com.dowlandaiello.melon.host.Host;
import com.dowlandaiello.melon.pubsub.Message;
class MelonExample {
public myMethod() {
Host host = new Host(); // Construct the default host
host.listen(3000); // Listen on port 3000
host.peerstore.bootstrap("/ip4/...", host.transport, host.keypair.getPublic()); // Bootstrap the peerstore from a particular peer
host.pubsub.publish(new Message("some_topic", new String("You've got mail!"))); // Publish a message
}
}
```
### Subscribing to a Topic
```java
import com.dowlandaiello.melon.host.Host;
import com.dowlandaiello.melon.pubsub.Message;
class MelonExample {
public myMethod() {
Host host = new Host(); // Construct the default host
host.listen(3000); // Listen on port 3000
host.peerstore.bootstrap("/ip4/...", host.transport, host.keypair.getPublic()); // Bootstrap the peerstore from a particular peer
host.pubsub.subscribe("some_topic", (Message message) -> {
System.out.println((String) message.contents); // We've got mail!
}); // Subscribe to the some_topic topic
}
}
```