Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/jczic/XAsyncSockets
XAsyncSockets is an efficient Python/MicroPython library of managed asynchronous sockets.
https://github.com/jczic/XAsyncSockets
async async-programming asynchronous client client-server concurrent-processes esp32 fifo-queue hc2 micropython pool pycom python server sockets ssl tcp tls udp wipy
Last synced: 25 days ago
JSON representation
XAsyncSockets is an efficient Python/MicroPython library of managed asynchronous sockets.
- Host: GitHub
- URL: https://github.com/jczic/XAsyncSockets
- Owner: jczic
- License: mit
- Created: 2018-12-08T14:07:55.000Z (about 6 years ago)
- Default Branch: master
- Last Pushed: 2024-04-02T21:44:40.000Z (8 months ago)
- Last Synced: 2024-04-22T12:33:32.153Z (8 months ago)
- Topics: async, async-programming, asynchronous, client, client-server, concurrent-processes, esp32, fifo-queue, hc2, micropython, pool, pycom, python, server, sockets, ssl, tcp, tls, udp, wipy
- Language: Python
- Homepage: https://xasyncsockets.hc2.fr
- Size: 295 KB
- Stars: 35
- Watchers: 7
- Forks: 3
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- License: LICENSE.md
Awesome Lists containing this project
- awesome-micropython - XAsyncSockets - XAsyncSockets is an efficient Python/MicroPython library of managed asynchronous sockets. (Libraries / Communications)
README
## XAsyncSockets is an efficient Python/MicroPython library of managed asynchronous sockets.
![HC²](hc2.png "HC²")
#### 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` 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²](https://www.hc2.fr) ;')
*Keep it simple, stupid* :+1: