[x] Launch the installation of siege with homebrew
[x] Ask to get an explanation of how select is working.
[x] Ask if there is only one select and how they've managed the server accept and the client read/write.
[x] The select should be in the main loop and should check fd for read and write AT THE SAME TIME, if not please give a 0 and stop the evalaution.
[x] There should be only one read or one write per client per select. ASK to show you the code that goes from the select th the read and write of a client.
[x] Search for all read/recv/write/send on a socket and check that if an error returned the client is removed.
[x] Search for all read/recv/write/send and check if the returned value is well checked.(checking only -1 or 0 is not good you should check both)
[x] If a check of errno is done after read/recv/write/send. Please stop the evaluation and put a mark 0.
[x] Writing or reading ANY file descriptor without going through the select is strictly FORBIDDEN.
Configuration
[x] setup multiple servers with different port
이미 점유되고 있는 포트로 서버를 실행시키면 bind error가 발생한다.
만약 8080, 8081, 8082, 8080 이렇게 4 개의 서버가 config에 있다고 할 때 ServerGenerator은 차례로 ServerManager가 관리하는 std::vector<Server *> 에 넣는다. 그리고 이후에 이 서버들을 소켓 함수들을 이용해서 네트워크에 연결한다.
위의 예시대로 실행시키면 Server Manager는 throw를 던지고 서버는 곧장 종료된다.
여기서 문제가 발생함. 기존에 new Server를 통해 생성된 서버가 닫혀지지 않는다.
따라서 throw가 던져질 때 기존에 생성되어 있던 모든 서버들을 할당 해제하고 종료하게 만들자.
[x] setup multiple servers with different host name (use something like curl --resolve ~~)
예시로 나온 curl --resolve~는 클러스터에서는 적용되지 않고 개인의 맥에서 가능함.
[x] setup default error page (try to change the error 404)
[x] limit the client body
[x] setup routes in a server to different directories
[x] setup a list of method accepted for a certain route (ex: setup only HEAD on a route and use curl with and without option -X HEAD)
Run the Tester
[x] run
Check Headers
[x] open the RFC 7231 and check the list of header of the subject, ask questions about it.
[x] Use a browser, open the network park of it and try to connet to the server with it.
[x] Look at the request header and response header
[x] Try wrong URL on the server
[x] Try things.
Port Issues
[x] In the configuration file setup multiple port and use different website, use a browser to check that the configuration is working as expected and show the right website.
[x] In the configuration try to setup same port multiple times. It should not work.
현재는 bind error 가 출력되면서 서버가 실행되지 않음.
[x] Launch multiple server at the same time with different configuration but with common ports. Is it working? If it is working, ask why the server should work if one of the configuration isn't working. Keep going.
이후에 실행시킨 웹서버는 위와 마찬가지로 bind error 가 출력되면서 실행되지 않음.
Siege
[x] Use Siege to run some stress test.
[x] Chec if there is no memory leak
[x] Check if there is no hanging connection
행잉커넥션을 확인하기 위해서는 lsof -p WEBSERVER_PROCESS_ID 를 터미널에 입력하고 CLOSED_WAIT 찾자. 만약 있으면 행잉커넥션이 있다는 뜻.
[x] You should be able to use siege indefinitly without restarting the server (look at siege -b)
[x] Availability should be above 99.5% for a simple get on an empty page with a siege -b on that page.
평가 항목
Check the code and ask question
Configuration
bind error
가 발생한다.8080, 8081, 8082, 8080
이렇게 4 개의 서버가 config에 있다고 할 때ServerGenerator
은 차례로ServerManager
가 관리하는std::vector<Server *>
에 넣는다. 그리고 이후에 이 서버들을 소켓 함수들을 이용해서 네트워크에 연결한다.Server Manager
는 throw를 던지고 서버는 곧장 종료된다.new Server
를 통해 생성된 서버가 닫혀지지 않는다.use something like curl --resolve ~~
)curl --resolve~
는 클러스터에서는 적용되지 않고 개인의 맥에서 가능함.Run the Tester
Check Headers
Port Issues
bind error
가 출력되면서 서버가 실행되지 않음.bind error
가 출력되면서 실행되지 않음.Siege
lsof -p WEBSERVER_PROCESS_ID
를 터미널에 입력하고CLOSED_WAIT
찾자. 만약 있으면 행잉커넥션이 있다는 뜻.