Crow
C++ Framework forwriting Web server
http://github.com/ipkn/crow
GitHub Star 1251개
Hacker News vote 194
https://news.ycombinator.com/item?id=8002604
5.
Web server 개념
브라우저로접속해서 요청을 보내면
해당 요청에 맞는 응답을 보내줌
GET / HTTP/1.1
Host: www.example.com
HTTP/1.1 200 OK
Content-Length: 12
...
Hello World!
6.
간단한 Crow 예제
#include“crow_all.h”
int main() {
crow::SimpleApp app;
CROW_ROUTE(app, “/”)
([]{
return “Hello world!”;
});
app.port(8080).run();
return 0;
}
7.
… as Flask(from Quickstart)
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello World!'
if __name__ == '__main__':
app.run()
constexpr
컴파일 타임에 계산할수도 있는 함수 또는 값
cin >> n; cout << fact(n); // 런타임
fact(5) == 120, 컴파일 타임에 계산 가능
→ 배열의 크기, 템플릿 인자 등으로 사용 가능
string literal의 컴파일 타임 해쉬 계산
29.
get_parameter_tag
URL 을 받아인자 정보를 가지는 숫자로 변환
인자가 없는 경우 0
URL 인자는 5종류: <int>=1 <uint>=2 …
6진법으로 표현
(자세한 구현은 생략)
호출부 구현
template <typenameCP,
int NInt, int NUint, int NDouble, int NString,
typename S1, typename S2>
struct call;
S1 - URL로 부터 정의된 핸들러 인자 타입의 리스트
S2 - 호출을 위한 타입+인덱스 정보의 리스트
N?? - 인자 처리를 위한 인덱스 값들, CP - 호출 파라미터
고려해야 할 점
멀티쓰레드 작업 배분
Connection 객체의 생성, 소멸 관리
HTTP 타임 아웃 (Keep-Alive)
98.
초기 버전
boost::asio +joyent/http-parser
asio::io_service 하나
concurrency 개수 만큼 io_service.run()
shared_ptr<Connection> 으로 수명 관리
asio::deadline_timer로 타임아웃 처리
99.
초당 처리 횟수가100,000 이상..
shared_ptr의 atomic 연산이 성능 부하
deadline_timer 내부 자료구조 업데이트 부하
100.
여러 개의 싱글쓰레드 서버의 결합
N 개의 작업용 쓰레드 (asio::io_service ✕ N)
요청이 들어올 때마다
어느 쓰레드가 처리할지 RR로 분배
해당 요청에 대한 모든 처리는
담당한 쓰레드 안에서만 이루어짐
template <typename A,typename B>
auto add(A a, B b) -> decltype(a+b)
{ return a+b; }
template <typename A, typename B>
decltype(declval<A>() + declval<B>())
add(A a, B b)
C++14: return type deduction
C++14 - minorpatch to 11
Function return type deduction
Relaxed constexpr
Variable template
Lambda capture expression
Generic lambda
auto lambda = [a = 3](auto x, auto y)
{return a + x + y;};
115.
C++14 - minorpatch to 11
그외 …
01010b, 1’234’5678’9 == 123456789
make_unique
...
116.
C++14 - minorpatch는 훼이크
auto p = [](auto& s, auto...x){
[](...){}((s<<x,1)...);
};
p(cout, 42, "hello?");
위 코드의 실행 결과를 설명하시오. (3점)
117.
VS2015 RC C++11지원
http://blogs.msdn.com/b/vcblog/archive/2015/04/29/c-
11-14-17-features-in-vs-2015-rc.aspx
ref-qualifiers(멤버함수 뒤 &&)
Inheriting constructors
u8"한글", char16_t , char32_t
struct B1 {
B1( int );
};
struct D1 : B1 {
using B1::B1;
};