2011-02-05 1 views
0

Вопрос об архитектуре сервера с Qt. Например, есть слот ReadyRead() вызывается, когда сокет сигналы readyRead() Если есть несколько видов запросов мы можемQt TcpServer архитектура

void Server::ReadyRead() 
{ 
    QString msg = readFirstWordFromAvaiableData(); 
    switch (msg){ 
     case "PING": 
     case "GET": // and so on 
    } 
} 

Интересно, есть ли другой способ сделать это. Я предполагаю, что это не расширяемо и комфортно.

Если я хочу, чтобы сервер работал с клиентом, написанным на Java, C, Perl и т. Д. Я должен использовать только QByteArray, правильно? Во всех образцах от клиента QtDemo отправляет размер сообщения перед сообщением. Это необходимо?

Было бы неплохо, если бы вы предложили мне образцы некоторых серверов, написанных на Qt (на github, bitbucket и т. Д.). Я хочу посмотреть, как организованы производственные серверы.

ответ

2

Если каждая из ваших команд имеет фиксированную длину полезной нагрузки, может не потребоваться отправить длину сообщения.

QByteArray - удобная обертка вокруг массива unsigned char и имеет некоторые полезные полезные методы, поэтому это хорошая вещь для использования. Вы также можете использовать QString, если ваш протокол основан на тексте, хотя имейте в виду, что по умолчанию QString является Unicode, поэтому символ занимает 2 байта вместо одного. Вы можете использовать соответствующие функции преобразования (QString :: fromUtf8, QString :: fromAscii и т. Д.).

Я бы сначала предложил взглянуть на examples in Qt documentation, если вы еще этого не сделали. Однако у вас нет других примеров, чтобы рекомендовать.