XAsyncSockets is an efficient Python/MicroPython library of managed asynchronous sockets.

Very easy to integrate and very light with one file only :
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 and StartSSLContext doesn't works on MicroPython (in asynchronous non-blocking sockets mode)
- It is widely recommended to use
StartSSLContext rather than StartSSL (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: