나는 boost :: asio를 사용하여 C++로 작성된 소켓 서버를 가지고 있으며 클라이언트에 데이터를 보내고 있습니다.소켓 : 수신/구문 분석시 '대기'하지 않고 클라이언트에 데이터를 보내는 방법
서버는 데이터를 청크로 보내고 클라이언트는 수신 한대로 각 청크를 구문 분석합니다. 둘 다 꽤 많은 싱글 스레드입니다.
서버가 최대한 빨리 데이터를 쓰고 클라이언트에서 구문 분석을 기다리지 않도록 서버에서 어떤 디자인을 사용해야합니까? 서버에서 비동기식 작업을해야한다고 생각합니다.
클라이언트에서도 변경 작업을 수행 할 수 있다고 생각하지만 이상적으로 서버는 클라이언트 작성 방법에 관계없이 클라이언트를 기다리지 않아야합니다.
이 같은 소켓에 데이터를 쓰고 있어요 :
size_t bytesWritten = m_Socket.Write(boost::asio::buffer(buffer, bufferSize));
업데이트 : 소켓에 비동기 적으로 작성하는 부스트의 메커니즘을 사용하려고 하겠어
. http://www.boost.org/doc/libs/1_36_0/doc/html/boost_asio/tutorial/tutdaytime3/src.html
등을 참조하십시오.
boost::asio::async_write(socket_, boost::asio::buffer(message_),
boost::bind(&tcp_connection::handle_write, shared_from_this(),
boost::asio::placeholders::error,
boost::asio::placeholders::bytes_transferred));
- 알렉스
정보를 제공해 주셔서 감사합니다. –
아, 비동기 API를 찾은 것 같습니다. BSD 스타일 API의 관점에서 볼 때,이 작업은 쓰여질 때까지 (TCP 스택이 아닌) 프로세스에서 쓰기 작업을 큐에 넣는 것입니다. 운이 좋다면 같은 소켓에 동시에 많은 쓰기 작업을 할 수 있습니다. 종종 단 하나만 허용됩니다. –
시원하게, 나는 그것이 어떻게 진행되는지 알려줄 것이다 ... –