Click here to Skip to main content
15,890,897 members
Please Sign up or sign in to vote.
5.00/5 (1 vote)
See more:
Hello!

There is a task to create a distributed analysis system. There are client and server sides. On the server side I have a program which collects data from sensors, saving measurements to database and doing some sort of basic analysis. On the client side I have a program which connects to server program, allows to control sensors, gets results from database and shows these results of measurements to user. It is possible that there will be more than 10 different clients on different PC connected to the server program via wired network of certain facility.

I plan to create server application and client application with C++ Qt libraries.

Is it reasonable to use Qt network library to solve this type of task? (amount of work to be done to handle connection management, data transfer management between server and clients etc)

Is there a commonly used industrial cross platform network library for C++ which can give high performance and ready-made solution for client-server relation tasks? (free and non-free libraries)

So, the main reason of this question is:
I want to focus mainly on business logic of server and client apps rather than on network programming art.
Posted
Updated 1-Dec-14 3:50am
v2
Comments
chandanadhikari 2-Dec-14 2:42am    
was just wondering if you want something like a SCADA networking.
Googled with 'scada networking' and there were results showing various vendors.
Ikseg 2-Dec-14 5:07am    
well, SCADA is too big for this task... I use unique devices which is not supported by SCADA and I have my own analysis system developed by myself. I want to embed my software into network and control it remotely.

Judging by your description you should consider a different architecture:
Use a database server as your central server, use separate sensor clients to obtain and store the data, use stored procedures triggered by simple clients to read and filter the data.

Using a dedicated database solves the concurrency and scaling (if that may be an issue) problems. It also separates the hardware and potential real-time concerns of the sensor readers from the performance and transaction safety issues of the database. Not that you can't write an application that covers all that, it's just that database requirements are so completely different from sensor reader requirements that I don't see the benefit to combine the two - not to mention, what would you do if you want sensors in different locations instead of one? Where would you host the database-sensor application then? You'd need a separate sensor client then anyway!

Also, databases come with their own 'API' (e. g. ODBC) for remote access that is supported by many easy to obtain libraries, and that covers your networking as well.

You can obtain databases at very different price ranges, and can choose one that suits your wallet and needs best.

If you want to make your clients available on many platforms, consider implementing a web client. To be honest I have no practical (i. e. real project) experience with QT, and little about web programming, but I suspect a web client might be orders of magnitude faster to implement compared to any PC application doing the same, (QT) framework or not.
 
Share this answer
 
Comments
Ikseg 2-Dec-14 5:10am    
That's a great idea actually! Thanks a lot!
"High performance" and "ready-made" are REALLY different sides of software dev. For high perfomance is C++ fine, but its needs a lot of work. You can and must tweak every thing.

Ready maked tools (ready to classes) are more found in C# or Java. For server problems Java is also good choice.

And your needs (around 10 - even 100) arent so big, so dev costs are important. => C#
 
Share this answer
 

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900