Overview¶
How it works:
- Multiple contexts can be connected over TCP/IP; the interconnected contexts together form a network.
- Messages are send between channel objects (channels are attached to a context).
- Channels are bound to a slot (a string name); a message send from a channel with slot X is received by all channels with slot X.
- Yoton may be used procedurally, or in an event-driven fashion.
Messaging patterns:
- Yoton supports the pub/sub pattern, in an N to M configuration.
- Yoton supports the req/rep pattern, allowing multiple requesters and repliers to exist in the same network.
- Yoton supports exchanging state information.
Some features:
- Yoton is optimized to handle large messages by reducing data copying.
- Yoton has a simple event system that makes asynchronous messaging and event-driven programming easy.
- Yoton also has functionality for basic client-server (telnet-like) communication.
A brief overview of the most common classes¶
- yoton.Context
- Represents a node in the network.
- Has a bind() and connect() method to connect to other nodes.
- yoton.Connection
- Represents a connection to another context.
- Wraps a single BSD-socket, using a persistent connection.
- Has signals that the user can connect to to be notified of timeouts and closing of the connection.
- Channel classes (i.e. yoton.BaseChannel )
- Channels are associated with a context, and send/receive at a particular slot (a string name).
- Messages send at a particular slot can only be received by channels associated with the same slot.
Example¶
One end
import yoton
# Create one context and a pub channel
ct1 = yoton.Context(verbose=verbosity)
pub = yoton.PubChannel(ct1, 'chat')
# Connect
ct1.bind('publichost:test')
# Send
pub.send('hello world')
Other end
import yoton
# Create another context and a sub channel
ct2 = yoton.Context(verbose=verbosity)
sub = yoton.SubChannel(ct2, 'chat')
# Connect
ct2.connect('publichost:test')
# Receive
print(sub.recv())