【问题标题】:Best protocol for client/server communication, from PHP/Perl to C++/Qt4客户端/服务器通信的最佳协议,从 PHP/Perl 到 C++/Qt4
【发布时间】:2011-02-15 10:42:20
【问题描述】:

我是开源信息亭管理系统 Libki 的作者。当前版本虽然功能强大,但对我来说是一次非常重要的学习体验。我正在完全重写,我很难决定使用什么协议。

服务器将使用 PHP 或 Perl 编写。很可能是 PHP,因为我需要支持库软件使用的一些不常见的协议(SIP and NCIP)。到目前为止,我只在 PHP 中找到了一个 SIP2 库。

客户端是用 C++/Qt4 编写的。

我正在研究用于客户端/服务器通信的 RPC 和 REST。我找到了 Qt4 的 RPC 客户端库,REST 已经是 Qt4 库的一部分。

有没有我错过的替代方案?到目前为止,REST 似乎是赢家。

【问题讨论】:

    标签: php c++ perl qt4


    【解决方案1】:

    有 Google 的 protobuf,您可以找到 PHP 的绑定 here

    【讨论】:

      【解决方案2】:

      不知道是否最好,但为了证明我必须做的概念验证,我在 Qt4 服务器上使用了 TCP 套接字,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。

      【讨论】:

        【解决方案3】:

        您没有提到的一个替代方案是 SOAP,尽管对于这个应用程序,我认为 REST 仍然是最好的解决方案。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2010-10-01
          • 2014-07-27
          • 2012-09-25
          • 1970-01-01
          • 2011-02-17
          • 1970-01-01
          • 2012-06-27
          • 2010-10-27
          相关资源
          最近更新 更多