This episode completes our introduction to the Asio C++ networking library by coding up an HTTP client app capable of retrieving content from the web. Rather than create a toy example using a trivial protocol, I wanted to demonstrate how easy it can be to write a practical app in just a short amount of time. Of course don’t interpret this as a license to continue the work and try to roll your own HTTP client library.
After publishing the last episode I realized that a discussion of Asio’s resolver class is incomplete without touching on reverse lookups. So this will be a quick episode to cover what we couldn’t get to last time.
This episode upgrades the resolver from last time by queuing up several
async_resolve queries at once. This helps us explore how the Asio implementation handles parallel requests for domain and service resolution. Here’s a hint: it’s not what you’d expect from reading the API.
This episode will provide a quick introduction to the Asio library and a small amount of asynchronous programming in general. Future episodes will continue this work by introducing additional libraries and talking to actual web services. For now we’ll start by building a small app that resolves hostnames into IP addresses. The gflags and glog libraries will provide some helpful infrastructure to get things started. Take a look at Episode 002 to refresh your memory of how they work.
Thanks in part to fierce competition over the past decade, C++ has seen a huge ramp in language features and batteries included library support. Build tools have also improved so much that starting a new project could almost be described as user-friendly. Most projects are standardizing around CMake which, with a style ironically similar to C++, can be quite powerful when restricted to a pleasant subset of the overall language. This is a quick guide to starting your own C++ programming project. Use a few of these concepts and you’ll be off to a great start.
Matlab is a great tool for prototyping new ideas, running experiments and visualizing the results. And its native support for Java libraries quickly takes those ideas from prototype to production. However with a large enough Matlab and Java code base, eventually one problem always rears its head. There is effectively no way to terminate a long running or blocked Java method call! Just try to
Ctrl-C out of a Java method from Matlab and see for yourself.