Skip to main content

The NDN State Vector Sync (SVS) Protocol in Python 3

Project description


ndn-python-svs: NDN State Vector Sync Protocol for Python

This python library implements the State Vector Sync (SVS) protocol to synchronise states between multiple clients over NDN for distributed realtime applications.

This is an official implementation but considered 'experimental'. If there are any concerns or suggestions, please create a new issue.

ndn-python-svs uses the python-ndn library for it's ndn client implementation.


Installation

Prerequisites

From Pip

Download the python pip library ndn-svs

To import, everything is defined under ndn.svs. For example:

from ndn.svs import SVSyncShared

From Source

Clone or Fork the github repository ndn-python-svs

Examples

To try out the chat demo application from source, follow the below steps.

To create a chat client, simply run this in the home directory of the repo:

python3 examples/chat_node.py -n NODE_NAME [-gp GROUP_PREFIX] [-h]

You may create as many of these as possible and all clients will sync up using SVS.

Usage

Group Prefix Strategy

Before you run the program, you must register the group prefix as multi-cast (even if you did not specifically define the group prefix):

nfdc strategy set <group-prefix> /localhost/nfd/strategy/multicast/%FD%04

The default (unless specified) group prefix is /svs for any build-in examples.

More on setting different strategies (like mutli-cast) for prefixes.

API

The API is defined here. In addition though, you may add _Thread to the end of any SVSync class to push SVS to a thread (SVSync normally runs on the current thread and requires a non-blocking program). The thread classes are derived from threading.Thread and use the same arguments as the normal classes. However, instead of passing the NDNApp as the first argument, you pass the face and keychain at the end of the parameters. Please call wait() after start() to allow the thread to fully intalize SVS. Also refer to the thread example for defining the missing data callback function. Otherwise, the thread class acts just the same as the normal class.

To make a new thread class based on a new SVS class from the SVSyncBase, make a new thread class derived from the SVSyncBase_Thread. In this new created class, you must define this function async def function(self) -> None:. Simply set self.svs to the new SVSync class.


License and Authors

ndn-python-svs is an open source project that is licensed. See LICENSE.md for more information.

Please note: This is only a implementation in python and does not claim any credit towards the actual design of SVS.

The Names of all authors associated with this implementation project are below:

  • Justin C Presley (justincpresley)

Special Mentions:

  • Xinyu Ma (zjkmxy) helped formed the TLV structure used in SVS

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ndn-svs-0.3.1.tar.gz (25.3 kB view hashes)

Uploaded Source

Built Distribution

ndn_svs-0.3.1-py3-none-any.whl (32.6 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page