"XAsyncSockets.py"
- 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)
| 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 |
| 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' |
| 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 )
| Static variable | Value |
|---|---|
| Error | 0x00 |
| ClosedByHost | 0x01 |
| ClosedByPeer | 0x02 |
| Timeout | 0x03 |
| 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 |
| 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) |
| 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 |
onLineRecvis a callback event of type f(xAsyncTCPClient, line, arg)onDataRecvis a callback event of type f(xAsyncTCPClient, data, arg)onDataSentis a callback event of type f(xAsyncTCPClient, arg)StartSSLandStartSSLContextdoesn't works on MicroPython (in asynchronous non-blocking sockets mode)- It is widely recommended to use
StartSSLContextrather 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) |
| 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) |
| 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 |
| 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 |
| 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 👍

