服务端框架
本节介绍 QVSOA 服务端框架的开发须知和开发步骤。
开发须知
QVSOA 运行时依赖 VSOA 动态库,开发调试时请先部署好 VSOA 运行时环境。
开发步骤
步骤 1:创建服务端
创建 QVSOA 微服务时,每个微服务都需要有一个确定的端口与确定的微服务名。创建服务端时若需要设定密码,则可以通过对应的接口或参数指定该服务的通信密码。
#include <QCoreApplication>
#include <QDebug>
#include <QVsoa>
constexpr char SERVER_INFO[] = "{\"name\":\"light_server\"}";
constexpr char SERVER_PASSWORD[] = "123456";
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
// Initialize server
QVsoaServer server(SERVER_INFO);
if (server.isInvalid()) {
qDebug() << "Can not create VSOA server!";
return -1;
}
// If need password
server.setPassword(SERVER_PASSWORD);
return a.exec();
}
步骤 2:启动微服务
调用 QVsoaServer
的 start
方法启动微服务。
#include <QCoreApplication>
#include <QDebug>
#include <QProcessEnvironment>
#include <QVsoa>
constexpr char SERVER_INFO[] = "{\"name\":\"light_server\"}";
constexpr char SERVER_PASSWORD[] = "123456";
constexpr char SERVER_ADDR[] = "0.0.0.0";
constexpr int SERVER_PORT = 3001;
void onNewClient(QPointer<QVsoaCliHandle> client)
{
qDebug() << QStringLiteral("New client, address: %1:%2").arg(client->address().ip()).arg(client->address().port());
}
void onDisconnected(QPointer<QVsoaCliHandle> client)
{
qDebug() << QStringLiteral("Client disconnect: %1:%2").arg(client->address().ip()).arg(client->address().port());
}
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
// Initialize server
QVsoaServer server(SERVER_INFO);
if (server.isInvalid()) {
qDebug() << "Can not create VSOA server!";
return -1;
}
// If need password
server.setPassword(SERVER_PASSWORD);
QObject::connect(&server, &QVsoaServer::newClient, onNewClient);
QObject::connect(&server, &QVsoaServer::clientDisconnect, onDisconnected);
int port = SERVER_PORT;
int auto_port = QProcessEnvironment::systemEnvironment().value("VSOA_AUTO_PORT", "-1").toInt();
if (auto_port != -1) {
port = auto_port;
}
// Start server
if (!server.start(QVsoaSocketAddress(AF_INET, SERVER_ADDR, port))) {
qDebug() << "Can not start VSOA server!";
return -1;
}
qDebug() << "Started VSOA server.";
return a.exec();
}