0

问题是关于使用 Qt 的服务器的体系结构。例如,ReadyRead()当一个套接字发出信号时,会调用一个槽readyRead() 如果有几种请求,我们可以

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

我想知道还有其他方法可以做到这一点。我想这不是可扩展和舒适的。

如果我希望服务器与用 Java、C、Perl 等编写的客户端一起工作,我应该只使用 QByteArray,对吗?在来自 QtDemo 客户端的所有示例中,在消息之前发送消息的大小。有必要吗?

如果您建议我对一些用 Qt 编写的服务器(在 github、bitbucket 等)上进行采样,那就太好了。我想看看生产服务器是如何安排的。

4

1 回答 1

2

如果您的每个命令都有固定长度的有效负载,则可能不需要发送消息长度。

QByteArray 是 unsigned char 数组的一个方便的包装器,并且有一些有用的实用方法,所以它是一个好用的东西。如果您的协议是基于文本的,您也可以使用 QString,但请注意默认情况下 QString 是 Unicode,因此一个字符占用 2 个字节而不是 1 个字节。您可以使用适当的转换函数(QString::fromUtf8、QString::fromAscii 等)。

如果您还没有这样做,我首先建议您查看Qt 文档中的示例。不过,没有任何其他示例可推荐。

于 2011-02-05T15:34:57.813 回答