This repository has been archived by the owner on Jul 16, 2024. It is now read-only.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
At this point, the island is able to exchange solutions between peers, be embedded in archipelagos and act as a listener to monitor the status of a swarm of ZeroMQ islands. All of these capabilities are available in C++ (PaGMO) and Python (PyGMO).
Along with this code submission there is a set of static documents and IPython notebooks that describe the setup process, explain the island's API/user interface and intended use cases through examples, and show how to monitor the status of a ZeroMQ swarm. Additionally, there is language-specific documentation available for Python (in Sphinx) and C++ (in Doxygen).
The original project intended to use a brokerless approach for all network communications. We considered two approaches for brokerless operation: active, network-level broadcast messages (such as zeroconf), and passive port scanning. Due to the limitations of these techniques and the scope of cases in which islands can communicate, we chose to go with a centralised broker that is reachable by all nodes. An example of a situation in which active discovery or passive scanning is unsuitable: inter-datacenter communication.
The original intent was to write a custom broker in ZeroMQ/C++, but due to time constraints and other factors the current ZeroMQ island uses Redis as a broker. Replacing it would not be complicated, because the broker is only maintaining a map of channel tokens to a list of IP addresses and providing realtime communication. Both of these things are relatively simple uses of the different types of sockets that ZeroMQ provides.
Because we are using an external broker, some dependencies are added to the project. These dependencies are completely optional and will not affect users that choose to compile PaGMO without ZeroMQ support (this is the default behaviour).
A simple example: