Added paper for the Journal of Open Source Software
This commit is contained in:
parent
9d0fdf2c9a
commit
684b9aa62a
2 changed files with 158 additions and 0 deletions
79
paper/paper.bib
Normal file
79
paper/paper.bib
Normal file
|
|
@ -0,0 +1,79 @@
|
|||
@online{asio,
|
||||
author = {Kohlhoff, Christopher M.},
|
||||
title = {Asio C++ Library},
|
||||
year = {2003},
|
||||
url = {https://think-async.com/Asio/},
|
||||
urldate = {2018-07-17}
|
||||
}
|
||||
|
||||
@online{clang_thread_safety,
|
||||
author = {{The Clang Team}},
|
||||
title = {Clang Thread Safety Analysis},
|
||||
year = {2007},
|
||||
url = {https://clang.llvm.org/docs/ThreadSafetyAnalysis.html},
|
||||
urldate = {2018-07-17}
|
||||
}
|
||||
|
||||
@online{boost,
|
||||
author = {{Boost Community}},
|
||||
title = {Boost C++ Libraries},
|
||||
year = {2003},
|
||||
url = {https://www.boost.org/},
|
||||
urldate = {2018-07-17}
|
||||
}
|
||||
|
||||
@online{beast,
|
||||
author = {Falco, Vinnie},
|
||||
title = {Boost.Beast},
|
||||
year = {2016},
|
||||
url = {https://github.com/boostorg/beast},
|
||||
urldate = {2018-07-17}
|
||||
}
|
||||
|
||||
@online{h20,
|
||||
author = {{DeNA Co., Ltd.}},
|
||||
title = {H2O},
|
||||
year = {2014},
|
||||
url = {https://github.com/h2o/h2o},
|
||||
urldate = {2018-07-17}
|
||||
}
|
||||
|
||||
@online{websocket_protocol,
|
||||
author = {{Internet Engineering Task Force}},
|
||||
title = {The WebSocket Protocol},
|
||||
year = {2011},
|
||||
url = {https://tools.ietf.org/html/rfc6455},
|
||||
urldate = {2018-07-17}
|
||||
}
|
||||
|
||||
@online{simple_websocket_server,
|
||||
author = {Eidheim, Ole Christian},
|
||||
title = {Simple-WebSocket-Server},
|
||||
year = {2014},
|
||||
url = {https://gitlab.com/eidheim/Simple-WebSocket-Server},
|
||||
urldate = {2018-07-17}
|
||||
}
|
||||
|
||||
@online{mame,
|
||||
author = {MAMEDev},
|
||||
title = {MAME},
|
||||
year = {1997},
|
||||
url = {https://www.mamedev.org/},
|
||||
urldate = {2018-07-17}
|
||||
}
|
||||
|
||||
@online{wakely,
|
||||
author = {Wakely, Jonathan},
|
||||
title = {Working Draft, C++ Extensions for Networking},
|
||||
year = {2017},
|
||||
url = {http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/n4656.pdf},
|
||||
urldate = {2018-07-17}
|
||||
}
|
||||
|
||||
@article{chung,
|
||||
title = {Point Cloud Framework for Rendering 3D Models Using Google Tango},
|
||||
author = {Chung, Maxen and Callin, Julian},
|
||||
year = {2017},
|
||||
publisher = {Santa Clara: Santa Clara University, 2017},
|
||||
url = {https://scholarcommons.scu.edu/cseng_senior/84}
|
||||
}
|
||||
79
paper/paper.md
Normal file
79
paper/paper.md
Normal file
|
|
@ -0,0 +1,79 @@
|
|||
---
|
||||
title: 'Simple-Web-Server: a fast and flexible HTTP/1.1 C++ client and server library'
|
||||
tags:
|
||||
- C++
|
||||
- web
|
||||
- http
|
||||
- client
|
||||
- server
|
||||
- library
|
||||
- asio
|
||||
authors:
|
||||
- name: Ole Christian Eidheim
|
||||
orcid: 0000-0001-5355-6326
|
||||
affiliation: 1
|
||||
affiliations:
|
||||
- name: Department of Computer Science, Norwegian University of Science and Technology
|
||||
index: 1
|
||||
date: 18 July 2019
|
||||
bibliography: paper.bib
|
||||
---
|
||||
|
||||
# Summary
|
||||
|
||||
The programming language C++ is commonly used for resource intensive tasks.
|
||||
Simple-Web-Server is a library that can be utilized in C++ applications to
|
||||
implement web-resources or perform HTTP(S) requests in a simple manner across OS
|
||||
platforms compared to using a networking library directly.
|
||||
|
||||
The main features, apart from speed and ease of use, are flexibility and safety.
|
||||
The asynchronous I/O library Asio C++ Library [@asio] is used to implement
|
||||
networking and asynchronous event handling. The sending of outgoing messages has
|
||||
been made thread safe, and event handling in one or several threads is
|
||||
supported. The default event handling strategy is using one thread, commonly
|
||||
called event-loop, which makes accessing shared resources safe without using
|
||||
resource locking through for instance mutexes. Although, accessing shared
|
||||
resources in a multithreaded event-handling strategy can be made safer by
|
||||
utilizing the annotation offered in Clang Thread Safety Analysis
|
||||
[@clang_thread_safety]. In some cases, however, processing requests
|
||||
sequentially, in an event-loop scheme, can be faster than processing the
|
||||
requests in several threads where shared resources must be protected from
|
||||
simultaneous use.
|
||||
|
||||
An additional safety feature is stopping of asynchronous handlers when the
|
||||
associated client or server object has been destroyed. An atomic instruction
|
||||
based class, ScopeRunner, was implemented to achieve this since reader-writer
|
||||
locks proved more resource intensive for this specific task.
|
||||
|
||||
The Asio C++ Library [@asio] is currently proposed to the C++ standard library
|
||||
[@wakely]. If accepted in one of the future revisions of the C++ programming
|
||||
language, C++ applications can make use of a standardized event handling system.
|
||||
Until then, efforts are made to support old and new versions of the Asio C++
|
||||
Library, as well as both the standalone and Boost [@boost] variants of the
|
||||
library.
|
||||
|
||||
Simple-Web-Server is used in teaching at the Norwegian University of Science and
|
||||
Technology, and used in many external projects, for instance in the
|
||||
multi-purpose emulation framework MAME [@mame]. The library was also used in the
|
||||
senior thesis by Chung and Callin [@chung].
|
||||
|
||||
There are several alternatives to Simple-Web-Server. Most notably
|
||||
Boost.Beast [@beast], but this library is made for library authors and is thus
|
||||
harder to utilize in a C++ application. Additionally, Boost.Beast does not support
|
||||
standalone Asio. Another alternative is H2O [@h20] that supports several event
|
||||
handling systems, however, Asio is not yet supported. Both Boost.Beast, and to a
|
||||
lesser degree H2O, supports the WebSocket protocol [@websocket_protocol]. In the
|
||||
case of Simple-Web-Server, WebSocket is supported through a related external
|
||||
project named Simple-WebSocket-Server [@simple_websocket_server].
|
||||
|
||||
Based on Simple-Web-Server, a new C++ library supporting HTTP/2 is under
|
||||
development. HTTP/2 is very different from HTTP/1.1, but the experiences from
|
||||
developing Simple-Web-Server, and some its implementations, such as the
|
||||
ScopeRunner class, can be helpful when writing an HTTP/2 library.
|
||||
|
||||
# Acknowledgments
|
||||
|
||||
I would like to thank all those who have contributed to the Simple-Web-Server
|
||||
project.
|
||||
|
||||
# References
|
||||
Loading…
Add table
Add a link
Reference in a new issue