그게 정석이지 애초에 TCP는 바이트 잖아 그래서 버퍼 누적 후에 메시지 다 모아서 파싱해야함
ㅆㅇㅆ(124.216)2025-07-11 19:01
답글
원하는 만큼 데이터가 도착 안 했으면, 그거 모아뒀다가 처음부터 다시 파싱 시도하고 그럼?
그리고 복사 비용 아끼는건 불가능?
익명(106.241)2025-07-11 19:14
답글
고정 길이 데이터 쓰고 억지로 지랄하는거밖에 없나
익명(106.241)2025-07-11 19:15
버퍼에 안읽고 바로 처리한다는건 대체 무슨소리니 프붕아 시발 말이되는소리를 해
프갤러 1(59.14)2025-07-11 22:46
답글
소켓 자체에 등록한 버퍼가 따로 있고 그거 말고 따로 버퍼 두냐 마냐 얘기임
익명(106.241)2025-07-11 23:13
답글
ㅇㅇ 복사 존나해야됨 왜냐? 그 버퍼는 재사용해야하는 버퍼라 빨리 방빼는게 좋거든
프갤러 1(59.14)2025-07-11 23:17
답글
제로카피는 망상임?
익명(106.241)2025-07-11 23:24
답글
일단 제로카피라는 말을 여기서 쓰는게 그렇게 정확한 표현이 아님. 내가 버퍼를 또 쓰는게 좋다고 한 이유는 1. 데이터를 받기 위한 버퍼는 여러 커넥션에서 공유하거나, 공유하지 않더라도 다음 데이터를 받기 위해서 금방 비워주어야 하는 버퍼임. 오래걸리는 작업이 있다고 가정한다면 이 버퍼를 처리과정에 넘기는건 오히려 효율에 더 안좋음 2. 데이터를 받기 위한 버퍼는 raw데이터고, 데이터를 처리하기 위한 버퍼는 중간작업물임. 코드 표현의 의미로서도 구분해두는게 유지보수할때 용이함
프갤러 1(59.14)2025-07-11 23:28
답글
ㄳㄳ 본 적이 없어서 복사하면 안 좋은ㄱ ㅓ아닌가? 그러고 있었음.
책이나 예제 찾아보니까 죄다 간단하게 구현해서 stream으로 조각나서 오는 경우 배제된, 단순 echo서버 정도밖에 안 보여서
익명(106.241)2025-07-11 23:30
답글
그럼 버퍼에 계속 쌓아두면서 데이터 다 도착했는지 확인하면서 파싱 여러번 시도함?
익명(106.241)2025-07-11 23:31
답글
당연히 폴링 말고 receive 이후에 시도하는 식으로
익명(106.241)2025-07-11 23:31
답글
어떤 책을 보고있는지는 모르겠지만 아마 책 뒤쪽가면 select/epoll이나 iocp같은 멀티플렉싱 방식을 보여줄거임.그쯤 가면 연결/데이터 수신 처리와 데이터 처리/비즈니스로직을 위한 코드를 아예 분리하는 편이 낫다는걸 알게될거임. 즉 너가 말하는 데이터 도착했는지 확인/ 들어온 데이터 파싱이 별개의 로직으로 분리가 되는거지. 이쯤되면 효율이고 뭐고 코드가 복잡해지고 확장성도 중요해져서 버퍼를 따로 둘수밖에 없게됨
프갤러 1(59.14)2025-07-11 23:36
답글
이게 게으르게 거의 1년째 잡고 있는데 그런 서버 방식에 대해서만 서술한 책들만 좀 봤지 응용계층에서의 구현을 서술한 책을 아에 못 봤음.
외국 책도 합쳐서 네트워크 프로그래밍 관련 10개 가량은 뒤져본거 같은데 버퍼 복사 해서 파싱하는 과정 없이 바로 한 번 읽고 그거 바로 고대로 돌려주는 방식의 야만적인 구현만 보였어서. 추천해줄 볼만한 거 있음?
익명(106.241)2025-07-11 23:40
답글
그래서 TCP는 stream으로 조각나서 오니까 이렇게 바로 읽는게 아니라 모아서 처리해야 하는거 아닌가?
근데 그럼 복사비용 발생하는데 비효율적이게 되나? 이렇게 하면 안 되나? 이런 질문에서 막혀있었음
익명(106.241)2025-07-11 23:41
답글
글쎄.. 나도 딱히 책을 통해 배운건 아니어서. 차라리 http 1.1 서버를 구현해보는건 어떰? 인증같은 기능은 제외하고 몇가지 데이터 형식에 집중해서 멀티플렉싱 가능한 서버를 만들어보면 도움이 될걸. 나야 일하면서 배웠지만 시간이 있다면 직접 저런거 한번쯤 구현해보고싶긴함
프갤러 1(59.14)2025-07-11 23:44
답글
흠.. 근데 소켓프로그래밍 해봤으면 알겠지만, TCP 스트림은 말그대로 스트림이기 때문에 조각나서 오는건 전혀 관계가없음. 애초에 커널이 조각난채로 주지도 않음. 버퍼 채우고, 데이터 더있으니까 더 받아 하면서 주는게 전부지. 그런식으로 여러번 쪼개져서 버퍼에 담기는 데이터를 처리하는 방법은 여러가지가 있음. 큰 데이터라면 파일에 담았다가 처리하든가, 슬라이딩 윈도우로 약간 복잡한 처리를 가미해서 필요한 데이터를 골라내든가, 아니면 훨씬 거대한 메모리를 잡아서 한방에 그 메모리에 집어넣든가. 애초에 소켓 수신 버퍼는 크게 잡아봐야 커널의 링버퍼 엔트리 사이즈보다 커지면 의미가 없음.
프갤러 1(59.14)2025-07-11 23:48
답글
그래서 웹쪽에 관심 없었다가 이쪽으로 접근하는게 배우기 좋을거같아서 http 구현하는 책 같은 것도 찾아보긴 했음. https 구현하는 책 찾아서 볼려고 함.
근데 이거 http도 요즘엔 단순 tcp가 아니라 다 http 라이브러리 지원해가지고, 또 http로 접근하면 https로 리다이렉트 해서 귀찮던데
일단 님이 뭐 대충 알려줬으니까 지금 하던거 해볼려고 함
익명(106.241)2025-07-11 23:50
답글
https 구현하는책?? 내가 아는 한 그 C++로 https 프로토콜 구현하는 파란색깔 책이면 재밌긴해도 모든 페이지의 내용을 싹다 알아보겠다는 노력이 없으면 그다지 의미가 없는데다 필요이상으로 많은 내용을 책에 눌러담느라 설명과 이론적 배경도 설렁설렁 넘어가서 별로였던 기억이 있음. 걍 tcp 패킷 덤프 떠서 오가는 데이터 들여다보고 재밌어 보이는 부분만 구현하는게 더 도움될걸
소켓에서 그걸하는거 아님?
아니다능
그게 정석이지 애초에 TCP는 바이트 잖아 그래서 버퍼 누적 후에 메시지 다 모아서 파싱해야함
원하는 만큼 데이터가 도착 안 했으면, 그거 모아뒀다가 처음부터 다시 파싱 시도하고 그럼? 그리고 복사 비용 아끼는건 불가능?
고정 길이 데이터 쓰고 억지로 지랄하는거밖에 없나
버퍼에 안읽고 바로 처리한다는건 대체 무슨소리니 프붕아 시발 말이되는소리를 해
소켓 자체에 등록한 버퍼가 따로 있고 그거 말고 따로 버퍼 두냐 마냐 얘기임
ㅇㅇ 복사 존나해야됨 왜냐? 그 버퍼는 재사용해야하는 버퍼라 빨리 방빼는게 좋거든
제로카피는 망상임?
일단 제로카피라는 말을 여기서 쓰는게 그렇게 정확한 표현이 아님. 내가 버퍼를 또 쓰는게 좋다고 한 이유는 1. 데이터를 받기 위한 버퍼는 여러 커넥션에서 공유하거나, 공유하지 않더라도 다음 데이터를 받기 위해서 금방 비워주어야 하는 버퍼임. 오래걸리는 작업이 있다고 가정한다면 이 버퍼를 처리과정에 넘기는건 오히려 효율에 더 안좋음 2. 데이터를 받기 위한 버퍼는 raw데이터고, 데이터를 처리하기 위한 버퍼는 중간작업물임. 코드 표현의 의미로서도 구분해두는게 유지보수할때 용이함
ㄳㄳ 본 적이 없어서 복사하면 안 좋은ㄱ ㅓ아닌가? 그러고 있었음. 책이나 예제 찾아보니까 죄다 간단하게 구현해서 stream으로 조각나서 오는 경우 배제된, 단순 echo서버 정도밖에 안 보여서
그럼 버퍼에 계속 쌓아두면서 데이터 다 도착했는지 확인하면서 파싱 여러번 시도함?
당연히 폴링 말고 receive 이후에 시도하는 식으로
어떤 책을 보고있는지는 모르겠지만 아마 책 뒤쪽가면 select/epoll이나 iocp같은 멀티플렉싱 방식을 보여줄거임.그쯤 가면 연결/데이터 수신 처리와 데이터 처리/비즈니스로직을 위한 코드를 아예 분리하는 편이 낫다는걸 알게될거임. 즉 너가 말하는 데이터 도착했는지 확인/ 들어온 데이터 파싱이 별개의 로직으로 분리가 되는거지. 이쯤되면 효율이고 뭐고 코드가 복잡해지고 확장성도 중요해져서 버퍼를 따로 둘수밖에 없게됨
이게 게으르게 거의 1년째 잡고 있는데 그런 서버 방식에 대해서만 서술한 책들만 좀 봤지 응용계층에서의 구현을 서술한 책을 아에 못 봤음. 외국 책도 합쳐서 네트워크 프로그래밍 관련 10개 가량은 뒤져본거 같은데 버퍼 복사 해서 파싱하는 과정 없이 바로 한 번 읽고 그거 바로 고대로 돌려주는 방식의 야만적인 구현만 보였어서. 추천해줄 볼만한 거 있음?
그래서 TCP는 stream으로 조각나서 오니까 이렇게 바로 읽는게 아니라 모아서 처리해야 하는거 아닌가? 근데 그럼 복사비용 발생하는데 비효율적이게 되나? 이렇게 하면 안 되나? 이런 질문에서 막혀있었음
글쎄.. 나도 딱히 책을 통해 배운건 아니어서. 차라리 http 1.1 서버를 구현해보는건 어떰? 인증같은 기능은 제외하고 몇가지 데이터 형식에 집중해서 멀티플렉싱 가능한 서버를 만들어보면 도움이 될걸. 나야 일하면서 배웠지만 시간이 있다면 직접 저런거 한번쯤 구현해보고싶긴함
흠.. 근데 소켓프로그래밍 해봤으면 알겠지만, TCP 스트림은 말그대로 스트림이기 때문에 조각나서 오는건 전혀 관계가없음. 애초에 커널이 조각난채로 주지도 않음. 버퍼 채우고, 데이터 더있으니까 더 받아 하면서 주는게 전부지. 그런식으로 여러번 쪼개져서 버퍼에 담기는 데이터를 처리하는 방법은 여러가지가 있음. 큰 데이터라면 파일에 담았다가 처리하든가, 슬라이딩 윈도우로 약간 복잡한 처리를 가미해서 필요한 데이터를 골라내든가, 아니면 훨씬 거대한 메모리를 잡아서 한방에 그 메모리에 집어넣든가. 애초에 소켓 수신 버퍼는 크게 잡아봐야 커널의 링버퍼 엔트리 사이즈보다 커지면 의미가 없음.
그래서 웹쪽에 관심 없었다가 이쪽으로 접근하는게 배우기 좋을거같아서 http 구현하는 책 같은 것도 찾아보긴 했음. https 구현하는 책 찾아서 볼려고 함. 근데 이거 http도 요즘엔 단순 tcp가 아니라 다 http 라이브러리 지원해가지고, 또 http로 접근하면 https로 리다이렉트 해서 귀찮던데 일단 님이 뭐 대충 알려줬으니까 지금 하던거 해볼려고 함
https 구현하는책?? 내가 아는 한 그 C++로 https 프로토콜 구현하는 파란색깔 책이면 재밌긴해도 모든 페이지의 내용을 싹다 알아보겠다는 노력이 없으면 그다지 의미가 없는데다 필요이상으로 많은 내용을 책에 눌러담느라 설명과 이론적 배경도 설렁설렁 넘어가서 별로였던 기억이 있음. 걍 tcp 패킷 덤프 떠서 오가는 데이터 들여다보고 재밌어 보이는 부분만 구현하는게 더 도움될걸
몰라!