Sinatra::Synchrony with websocket - concurrency

Given Sinatra::Synchrony is using EM-Synchrony "collection of convenience classes and primitives to help untangle evented code" so that you can write "fast, highly concurrent web applications with no callbacks (just by developing as if you were writing a normal Sinatra web application, and using non-blocking libraries)"..
How would one implement a Sinatra::Synchrony "hello world" app which uses websock protocol with no callbacks ?
To put it in another way: are Sinatra::Synchrony and EM-Synchrony also covering the websocket part ? I could not find enough documentation on this... Can someone give me a couple of lines of code to start ?
Thanks

Related

Use Go within a Qt C++ project

Is it possible to use a Go API in a Qt C++ project?
I would like to use the following Google API written in Go: https://cloud.google.com/speech-to-text/docs/reference/libraries#client-libraries-install-go
Is it possible to use a Go API in a Qt C++ project?
It could be possible, but it might not be easy and would be very brittle to run Go and Qt code in the same process, since Go and Qt have very different thread (goroutine) and memory models.
However, Go has (in its standard library) many powerful packages to ease the development of server programs, in particular of HTTP or JSONRPC servers.
Perhaps you might consider running two different processes using inter-process communication facilities. Details are operating system specific. I assume you run Linux. Your Qt application could then start the Go program using QProcess and later communicate with it (behaving as a client to your Go specialized "server"-like program).
Then you could use HTTP or JSONRPC to remotely call your Go functions from your Qt application. You need some HTTP client library in Qt (it is there already under Qt Network, and you might also use libcurl) or some JSONRPC client library. Your Go program would be some specialized HTTP or JSONRPC server (and some Google Speech to Text client) and your Qt program would be its only client (and would start it). So your Go program would be some specialized proxy. You could even use pipe(7)-s, unix(7) sockets, or fifo(7)-s to increase the "privacy" of the communication channel.
If the Google Speech to Text API is huge (but it probably is not) you might use Go reflective or introspective abilities to generate some C++ glue code for Qt: go/ast, go/build, go/parser, go/importer, etc
BTW, it seems that Google Speech to Text protocol is using JSON with HTTP (it seems to be some Web API) and has a documented REST API, so you might directly code in C++ the relevant code doing that (of course you need to understand all the details of the protocol: relevant HTTP requests and JSON formats), without any Go code (or process). If you go that route, I recommend making your Qt (or C++) code for Google Speech to Text some separate free software library (to be able to get feedback and help from outside).

Server/Client program for data transfer. What is the professional, right way to do it?

For my scientific collaboration, I wrote a C++ server/client (terminal server for linux, and cross-platform GUI client using Qt) that is mainly meant to transfer data from multiple clients around the world to store it on one server for analysis (pretty much like LIGO and Virgo that caught gravitational waves). For the communication low-level protocol I used boost::asio::ssl.
The "odd" part: In my programs, I created my own half-duplex messaging protocol between the server and the client from scratch. The messaging was in string form containing the version of the protocol, endianness of the computer, length of the message, type of the message (login/file/error/etc...), an MD5 hash for verification of the completeness of the transferred data. I got highly criticized on Stackoverflow chat when I said I did this. The part that got specially criticized is: Writing my own messaging protocol.
Now I created this, and I know there should be better protocols that are already written that I shouldn't rewrite it from scratch. However, I wanted to learn how to do this myself, and I did, and the program works, and my collaboration is satisfied, and the sky is blue with birds singing.
My question: If I am to rewrite this program again, what kind of libraries should I use? I'm looking for a protocol, using which I can send messages/data and get the server to respond with messages/data, including username/password to authenticate the user before any communication is transferred? How would you have done it?
PS: Please consider this question coming from a beginner in writing network and internet wide programs. And please don't hesitate to ask for more details.

Several UIs accessing one (server) proecess - which IPC?

I'm new here and I have a question which I could not find answered by searching.
I've written a program accessing a database in C++ on Linux. Now I would like to be able to give different UI processes (graphical (possible Qt) interface, console UI, web UI) access to this data - with client processes running on the same machine as the server. Which IPC methods would you recommend?
I looked into it, but mostly found sockets recommended - maybe, but not needed now.
The second best thing I found was D-BUS.
Is there any "best practices" or howto? Is there any criteria I should heed to chose a method?
Thanks,
Mark

new to windows application development, need some advice

Hi
I'm starting windows application development on windows7 with C++. ( or C#/Java if necessary ).
The application in mind right now is a window that has a inner frame (kind like a iframe) displaying a web page in it, and to have the outer and inner frame be able to communicate ( ie. the webpage pass a message to the outer frame, possibly by JavaScript, and the outer frame recognize the message and starts the computer's camera ).
It would be something like this
http://html5demos.com/postmessage2
except that the outer frame is a windows application instead of a webpage.
Preferably, the inner frame displaying the web page is powered by web-kit.
I really don't have much experience so I was wondering if such thing is possible and where to start.
Any advice or resource is welcomed.
Thanks in advance.
I've seen projects use the status bar to communicate with Javascript in an embedded browser.
RichHtml4Eclipse is such a project ; while no longer in development, it demonstrates the general approach. Events with structured data are raised by changing the status text, which native code on the outside can pick up and deserialize. Javascript methods may be called on the code in the page by using the method calls provided on the browser control.
I would support the comment that encourages you to avoid C++. There are WebKit bindings for both Java and C# ; in my experience, Java has the edge in portability but C# / .NET makes for an easier experience when developing GUI components.
Why don't you take a look at Qt. It is cross-platform, comes with QtCreator - a nice IDE, and can be easily integrated with WebKit (in fact, WebKit is started by KDE, which is based on Qt).
If you're running Windows and aren't concerned with portability, using .NET could much quicker. Perhaps this article would be of some use.

TCPStream Class for multithreaded TCP server

I'm currently working on transitioning a small console application to a TCP server / client application. The client will connect to the server via any Telnet client, and the server will replicate the standard console interface for each Telnet connection.
I started looking into doing this using the techniques I've learned from Beej's guide to network programming -- accepting the connection and then using fork() to separate it into its own process.
However, I would prefer to maintain my use of streaming IO (the original console application uses cin / cout, using similar functions for the networking logic would make the conversion process much simpler).
I've discovered the TCPStream class, hiding within sockets.h (http://www.gnutelephony.org/doxy/bayonne2/a00215.html)
It appears this class will allow me to use the server with streaming IO. However, I can't find a single example of using this class, nor can I find an explanation as to how to use fork() with it.
Any ideas? Thanks in advance for any help.
I think you are confusing the trees for the forest. One socket class is such a small part of what you need to do overall that it is not worth focusing on that.
If your objective is just to get your project working then just use an existing framework rather than trying to pull individual classes out of a large project. POCO has a TCPServer class that will do 90% of the work for you. QT, ACE and others have similar classes. There is not a huge amount of documentation on POCO but they do cover TCPServer pretty well and you can learn a lot from reading the source code if that is really where your interest lies.