개쥬지밥 방송 베껴서 아이디어를 얻음

대충 C 소켓으로 http 서버 코드 하나 짜고


#define l(x) printf(#x": %d ", x)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <signal.h>

#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>

#define PORT 80

int server_socket;

void sigkill_handler(int signal) {
close(server_socket);
l(signal);
exit(signal);
}

int main(int argc, char *args[]) {
if (argc < 2) {
printf("Usage: %s <server-name> ", args[0]);
return 1;
}
char *server_name = args[1];

signal(SIGKILL, (void *)sigkill_handler);

struct sockaddr_in server_address;

server_socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (server_socket == -1) {
return 1;
}
int reuse_address = 1;
setsockopt(server_socket, SOL_SOCKET, SO_REUSEADDR, (const void *)&reuse_address, sizeof(reuse_address));

server_address.sin_family = AF_INET;
server_address.sin_addr.s_addr = htonl(INADDR_ANY);
server_address.sin_port = htons(PORT);

int result_bind = bind(server_socket, (struct sockaddr *)&server_address, sizeof(server_address));
if (result_bind < 0) {
return 1;
}

int result_listen = listen(server_socket, 1);
if (result_listen < 0) {
return 1;
}
printf("%s server started ", server_name);

int count = 0;
while (1) {
struct sockaddr_in client_address;
socklen_t client_address_size = sizeof(client_address);
int client_socket = accept(server_socket, (struct sockaddr *)&client_address, &client_address_size);
printf("client connected: #%d ", ++count);

char buffer[4096];
int read_size = read(client_socket, buffer, sizeof(buffer));
sprintf(buffer, "HTTP/1.1 200 OK Host: localhost <!doctype html><html><head><title>Test Server</title></head><body>Hello World!<br/>Welcome to %s server!</body></html>", server_name);
write(client_socket, buffer, strlen(buffer));
close(client_socket);
puts("client disconnected");
}

return 0;
}


ec2 에 haproxy 설치해서



listen stats
bind :9000
stats enable
stats uri /

frontend http
bind :80
default_backend test

backend test
balance roundrobin
server test-1 172.31.13.154:80 check fall 3 rise 2
server test-2 172.31.15.157:80 check fall 3 rise 2
server test-3 172.31.2.147:80 check fall 3 rise 2


LB 설정 대충 해주고


웹서버코드 들어간 서버 3개 만들어서 돌린다음에 접속 테스트 해보니


소켓 서버 별 설정 안해도 haproxy 가 알아서 잘 돌려주네




테스트 끝났으니 다음 방송에 해볼거는 웹소켓서버 띄우고


웹서버 띄우고 대충 웹 채팅 만들어서


LB 뒤에 붙이고


방송중에 링크 뿌려서 채팅 가능하게 하고 방종 딱