Awesome
XAsyncSockets is an efficient Python/MicroPython library of managed asynchronous sockets.
Very easy to integrate and very light with one file only :
"XAsyncSockets.py"
XAsyncSockets features :
- Managed asynchronous sockets in a pool (up to thousands!)
- Works directly with I/O to receive and send very quickly
- Supports very large number of simultaneous TCP connections
- Supports concurrent synchronous processing operations if necessary (threaded)
- Implementation of TCP servers
- Implementation of TCP clients
- Implementation of UDP datagrams (sender and/or receiver)
- TCP client can event after a specified size of data or a text line received
- Each connections and receivings can waiting during a specified time
- The reasons of TCP client closures are returned
- Really robust, very fast and easy to use
- Compatible with MicroPython implementation (sockets layer, FiFo queue, perf counter)
XAsyncSockets classes :
Class name | Description |
---|---|
XAsyncSocketsPool | Managed pool of 'XAsyncSocket' objects |
XClosedReason | Enumerator of 'XAsyncSocket' closing reasons |
XAsyncSocket | Abstract class of managed asynchronous sockets |
XAsyncTCPServer | TCP server implementation of 'XAsyncSocket' |
XAsyncTCPClient | TCP client implementation of 'XAsyncSocket' |
XAsyncUDPDatagram | UDP sender/recever implementation of 'XAsyncSocket' |
XBufferSlot | Managed buffer |
XBufferSlots | Managed buffers collection |
XFiFo | Dedicated FiFo queue |
XAsyncSockets exceptions :
Class name | Description |
---|---|
XAsyncSocketsPoolException | Exception class for 'XAsyncSocketsPool' |
XAsyncSocketException | Exception class for 'XAsyncSocket' |
XAsyncTCPServerException | Exception class for 'XAsyncTCPServer' |
XAsyncTCPClientException | Exception class for 'XAsyncTCPClient' |
XAsyncUDPDatagramException | Exception class for 'XAsyncUDPDatagram' |
XFiFoException | Exception class for 'XFiFo' |
XAsyncSocketsPool class details :
Method | Arguments |
---|---|
Constructor | None |
GetAllAsyncSockets | None |
GetAsyncSocketByID | id (int) |
AsyncWaitEvents | threadsCount=0 (int) |
StopWaitEvents | None |
Property | Details |
---|---|
WaitEventsProcessing | Return True if "WaitEvents" is in processing |
( Do not call directly the methods AddAsyncSocket
, RemoveAsyncSocket
, NotifyNextReadyForReading
and NotifyNextReadyForWriting
)
XClosedReason class details :
Static variable | Value |
---|---|
Error | 0x00 |
ClosedByHost | 0x01 |
ClosedByPeer | 0x02 |
Timeout | 0x03 |
XAsyncSocket class details :
Method | Arguments |
---|---|
GetAsyncSocketsPool | None |
GetSocketObj | None |
Close | None |
Property | Details |
---|---|
SocketID | Get the opened socket unique ID |
OnClosed | Get or set an event of type f(closedReason) |
State | Get or set a custom object |
XAsyncTCPServer class details :
Method | Arguments |
---|---|
Create (static) | asyncSocketsPool , srvAddr (tuple of ip and port), srvBacklog=256 (int), bufSlots=None |
Property | Details |
---|---|
SrvAddr | Tuple of ip and port |
OnClientAccepted | Get or set an event of type f(xAsyncTCPServer, xAsyncTCPClient) |
XAsyncTCPClient class details :
Method | Arguments |
---|---|
Create (static) | asyncSocketsPool , srvAddr (tuple of ip and port), connectTimeout=5 (int), recvBufLen=4096 (int), sendBufLen=4096 (int), connectAsync=True (bool) |
AsyncRecvLine | lineEncoding='UTF-8' , onLineRecv=None (function), onLineRecvArg=None (object), timeoutSec=None (int) |
AsyncRecvData | size=None (int), onDataRecv=None (function), onDataRecvArg=None (object), timeoutSec=None (int) |
AsyncSendData | data (bytes or buffer protocol), onDataSent=None (function), onDataSentArg=None (object) |
AsyncSendSendingBuffer | size=None (int), onDataSent=None (function), onDataSentArg=None (object) |
StartSSL | keyfile=None , certfile=None , server_side=False , cert_reqs=ssl.CERT_NONE , ca_certs=None |
StartSSLContext | sslContext , serverSide=False |
onLineRecv
is a callback event of type f(xAsyncTCPClient, line, arg)onDataRecv
is a callback event of type f(xAsyncTCPClient, data, arg)onDataSent
is a callback event of type f(xAsyncTCPClient, arg)StartSSL
andStartSSLContext
doesn't works on MicroPython (in asynchronous non-blocking sockets mode)- It is widely recommended to use
StartSSLContext
rather thanStartSSL
(old version)
Property | Details |
---|---|
SrvAddr | Tuple of ip and port |
CliAddr | Tuple of ip and port |
IsSSL | Return True if SSL is used |
SendingBuffer | Get the existing buffer (memoryview) used to send data |
OnFailsToConnect | Get or set an event of type f(xAsyncTCPClient) |
OnConnected | Get or set an event of type f(xAsyncTCPClient) |
XAsyncUDPDatagram class details :
Method | Arguments |
---|---|
Create (static) | asyncSocketsPool , localAddr=None (tuple of ip and port), recvBufLen=4096 (int), broadcast=False (bool) |
AsyncSendDatagram | datagram (bytes or buffer protocol), remoteAddr (tuple of ip and port), onDataSent=None (function), onDataSentArg=None (object) |
- onDataSent is a callback event of type f(xAsyncUDPDatagram, arg)
Property | Details |
---|---|
LocalAddr | Tuple of ip and port |
OnRecv | Get or set an event of type f(xAsyncUDPDatagram, remoteAddr, datagram) |
OnFailsToSend | Get or set an event of type f(xAsyncUDPDatagram, datagram, remoteAddr) |
XBufferSlot class details :
Method | Arguments |
---|---|
Constructor | size (int), keepAlloc=True (bool) |
Property | Details |
---|---|
Available | Get or set the availability of the slot |
Size | Get the buffer size of the slot |
Buffer | Get the buffer of the slot |
XBufferSlots class details :
Method | Arguments |
---|---|
Constructor | slotsCount (int), slotsSize (int), keepAlloc=True (bool) |
GetAvailableSlot | None |
Property | Details |
---|---|
SlotsCount | Get the number of slots |
SlotsSize | Get the buffer size of each slots |
Slots | Get the list of slots |
XFiFo class details :
Method | Arguments |
---|---|
Constructor | None |
Put | obj (object) |
Get | None |
Clear | None |
Property | Details |
---|---|
Empty | Return True if the FiFo is empty |
By JC`zic for HC² ;')
Keep it simple, stupid :+1: