Para o que é programação de rede impulsionar-asio a melhor abordagem para processar a resposta?
-
11-09-2019 - |
Pergunta
Im novo para programação de rede e em particular a assíncronos-processos. Comece também novo, com o impulso-lib
Im implementação de uma classe, para aceder a uma imap-servidor. Posso enviar e receber o comandos e a resposta, em geral
A resposta está na fila em um dequeue dentro da classe. Pus simples as linhas de resposta na fila, para processamento adicional.
O que é agora a melhor maneira de processar a resposta na fila?
- Uma linha extra para verificar (tempo com base) a fila, para novas entradas?
- Cada vez que um novo entradas é empurrado para a fila de fazer algum retorno?
Como posso implementar e integrar este retorno?
Talvez alguém tem um pequeno exemplo para isso.
Graças
Solução
Cada vez que um novo entradas é empurrado para a fila de fazer algum retorno? Como posso implementar e integrar este retorno?
Eu suponho que você está trabalhando com conexão síncrona único segmento.
fazer algo assim:
class worker {
deque<message> messages;
bool is_writing_;
push_message(message msg) {
messages.push_back(msg);
notify();
}
void notify()
{
if(!is_writing_) {
is_writing_=true;
init();
}
}
void init()
{
if(messages.empty()) { is_writing_=false; return; }
messamge msg=messages.pop();
convert_to_vector(v);
async_write(socket,buffer(v),
boost::bind(&worker::complete,this,placehoders::error));
}
void complete(error_code const &e)
{
if(!e) {
init();
}
else { cleanup(); }
}
};
Nota !!!
Esta é a implementação único segmento. Se você quiser notificar a partir de outro segmento que deveria
Não chamada some_worker->push_message(msg)
, você deve usar iosrvice:
service.post(boost::bind(&worker::push_message,some_worker,msg));
E push_message
seria chamado a partir da mesma linha que corre ioservice.
Outras dicas
Uma forma possível de implementar o processador de fila é a utilização de um semáforo de sinalização.
Por exemplo tipo de condição pthread ( descrição ) se você estiver em uma plataforma compatível com POSIX.
Você poderia ter N número de "threads de processamento de fila" de espera no fundo.
-
Cada vez que algo é empurrado na fila de seu semáforo envia sinal que da.
-
O sinal é recebido por dormir tópicos "-processamento de fila", que inicia o processamento da fila, porque eles sabem que têm de dados.
-
Ao terminar o segmento de processamento de TI de dados, verifique fila de tamanho para ver se ele deve pegar outra coisa, se não, em seguida, voltar para à espera de um sinal.
-