/tuples-space-server

A docker image representing a remote tuple space server, part of a tuple space middleware.

Primary LanguageScalaMIT LicenseMIT

tuples-space-server

Build status semantic-release: conventional-commits GitHub Docker Image Version Scaladoc Issues Pull requests Codecov Maintainability Rating Duplicated Lines (%) Technical Debt

How to use

Build a new container from the latest version of the Docker image for this server using:

docker run -p 80:80 matteocastellucci3/tuples-space-server

When the server has booted up, it will be available at ws://localhost/tuplespace.

You can change the port on which the server is listening and the path at which the service is available using:

docker run -p 8080:8080 -e TUPLES_SPACE_PORT_NUMBER=8080 -e TUPLES_SPACE_SERVICE_PATH= matteocastellucci3/tuples-space-server

In this second example, the server will be available at ws://localhost:8080.

What is this?

This application is the server of a bigger project which allows to create tuple spaces easily and reliably. A tuple space is a mean to exchange pieces of information between parties while at the same time coordinating the actions of the parties that need those pieces of information. For example, an entity could suspend its job while waiting for the information to be available, not differently from how a future-based computation works. When it is available, it can carry on from where it left off. The idea of a tuple space, which very aptly is a "coordination medium", is to bring this onto distributed systems, which are by definition more challenging to model, coordinate and in general make work. If you are familiar with some message-oriented middleware, such as RabbitMQ, this is not different, with the added twist that not only we can send and receive messages, but also wait for them, decide whether remove them from the pool of messages, probe for their presence or absence etc. A tuple space is just a big pool of messages, waiting to be read from someone or probed or whatever. Differently from RabbitMQ, we just don't subscribe to topics, because every receive operation is intended to receive one and only one message.

This repo contains only the server part of this project: the server to which your apps communicate. The actual operations are discussed in the repo which hosts the client for interacting with the tuple space, you can find it here. Another repo exists which contains the core elements, such as tuples and templates, and it's here.

What should I do with this server?

Well, you should install it. If you are using some kind of automation tool for deploying your system, such as Docker Compose, you can specify in your docker-compose.yml to install it while deploying. Then, you must simply include the client in the app you are developing and you can start using it!

Can I use it?

Of course, the MIT license is applied to this whole project.