The signals and slots mechanism Cute uses to abstract communications over a network is a central feature of Qt programming and a widely known and easy-to-use technology. With Cute, developers can focus on writing application code instead of dealing with sockets or reliable, safe, and efficient network data processing. Also, by relying heavily upon Qt's meta-type system, Cute can provide concise, intuitive, and easy-to-use SDKs with a negligible learning curve.
Implementing a secure and high-performance server is a huge task. That's why, unlike other RPC systems, Cute provides its own server and frees developers from the burden and pitfalls of implementing one.
Cute provides a high-performance, asynchronous, event-driven, Linux-based server. In addition, by integrating epoll into Qt's event handling system, the Cute server can handle high network loads while staying responsive. Also, the Cute server uses error handlers to enable developers to identify and deal with malicious clients.
On the server side, developers only have to create and map classes to endpoints. The Cute server fetches mapped classes from a user-specified shared library loaded during startup. Cute also provides client SDKs for Linux, Windows, macOS, iOS, Android, and WebAssembly.
The Cute server uses TLS encryption to guarantee data confidentiality. Also, the Cute server provides highly configurable encryption settings. Ciphers, elliptic curves, custom Diffie-Hellman parameters, two-way SSL, the minimum permitted TLS protocol, and custom CA certificates can all be specified by users. Additionally, the Cute server uses HMAC to enforce message integrity on all of its editions on both unencrypted and encrypted connections.
Many RPC systems abstract the network side of the interaction wrongly. Information hiding aims at making developers more productive, but abstractions must not hide important behaviors inherent to network communication. The Cute server enables developers to identify clients and take action whenever a suspicious activity occurs on the server side.
With Cute, clients can connect to remote signals to receive server-side events. Cute provides the most straightforward and intuitive way for backend code to notify connected clients.
Cute uses WebSocket as its transfer protocol. WebSocket is a lightweight binary protocol that enables low latency, bidirectional communication between connected peers. Additionally, WebSocket is a friendly protocol for the intermediaries (proxies, firewalls, etc.) that may exist in the connection chain.
The signals and slots mechanism plays the perfect role as an abstraction to model network-based communications between objects due to its ability to naturally represent asynchronous interactions through events. Cute integrates with Qt's event handling system to provide an intuitive and high-performance messaging system.
Qt's meta-type system provides powerful introspection capabilities, enabling Cute to provide tiny SDKs that are extremely easy to use. With Cute, developers only have to write QObject-derived classes with specially-tagged signals and slots to communicate over a network. Cute does all the hard work under the hood by relying on Qt's meta-type system and signals and slots mechanism.
In addition, Cute provides a custom data streamer capable of handling rogue data sent by malicious clients trying to abuse the server.
Cute provides an elegant solution to implement communication among microservices. For C++ programmers that do not know/use Qt, it is much easier to use Cute than learning other RPC alternatives.
Additionally, developers can use HTTP to communicate with microservices implemented in other languages, as the Cute server fully supports HTTP-based interactions.
With Qt, developers can create mobile/IoT/desktop/browser apps. With Cute, these apps can interact with backend code seamlessly. Cute provides client SDKs for Linux, Windows, macOS, iOS, Android, and WebAssembly.
The signals and slots mechanism enables SaaS/API providers to create rich interaction models for their products.
Cute also protects the intellectual property of SaaS/API providers. Although Cute abstracts the network from clients and enables them to interact with remote objects as if they were local, server-side code stays on the server. Clients only need to know the signatures of the remote signals and slots to interact with remote objects on the server side.