Лучший протокол для связи клиент / сервер, от PHP / Perl до C ++ / Qt4 - PullRequest
3 голосов
/ 04 мая 2010

Я являюсь автором системы управления киосками с открытым исходным кодом, Libki. Текущая версия, хотя и функциональная, была для меня очень полезным опытом. Я работаю над полным переписыванием и с трудом решаю, какой протокол использовать.

Сервер будет написан на PHP или Perl. Скорее всего, PHP, потому что мне нужно поддерживать некоторые необычные протоколы, которые использует программное обеспечение библиотеки ( SIP и NCIP ) До сих пор я нашел только библиотеку SIP2 в PHP.

Клиент написан на C ++ / Qt4.

Я смотрю на RPC и REST для связи клиент / сервер. Я нашел RPC-клиентские библиотеки для Qt4, а REST уже является частью библиотек Qt4.

Есть ли альтернатива, которую я пропустил? Пока что REST кажется победителем.

Ответы [ 3 ]

2 голосов
/ 04 мая 2010

Есть Google protobuf , и вы можете найти привязки для PHP здесь .

0 голосов
/ 04 мая 2010

Одна из альтернатив, которую вы не упомянули, - это SOAP, хотя для этого приложения я думаю, что REST по-прежнему является лучшим решением.

0 голосов
/ 04 мая 2010

Не знаю, лучше ли, но для подтверждения концепции, которую мне пришлось сделать, я использовал TCP-сокет на сервере Qt4, и к нему подключался бы клиент Mono / C #. Вот набросок моего кода:

MainWindow::mainWindow()
{
    // more non relevant crap
    tcpServer = new QTcpServer(this);
    tcpServer->listen(QHostAddress::Any,3333);
    connect(tcpServer,SIGNAL(newConnection()),this,SLOT(on_new_serverConnection()));
}

void MainWindow::on_new_serverConnection()
{
    connection = tcpServer->nextPendingConnection();
    connect(connection, SIGNAL(readyRead()), this, SLOT(on_data_read()));
}

void MainWindow::on_data_read()
{
    QString s = connection->readAll();
    qDebug("file to load - %s", qPrintable(s));
}

Обратите внимание, что on_data_read() Я, вероятно, получу XML вместо просто имени файла, так как мне нужно также получить команды. Другими альтернативами являются разделяемая память, сокет unix (похожий на этот код) и, если вы хотите, чтобы пойти дальше: XMLRPC или SOAP, или даже dbus.

Просмотрите qt / examples / network /, qt / examples / dbus, qt / examples / ipc.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...