acl-dev / acl

C/C++ server and network library, including coroutine,redis client,http/https/websocket,mqtt, mysql/postgresql/sqlite client with C/C++ for Linux, Android, iOS, MacOS, Windows, etc..
https://acl-dev.cn
GNU Lesser General Public License v3.0
2.83k stars 937 forks source link

向导工具生成http服务项目 windows编译运行正常 linux下链接错误 #331

Closed dragon-dan closed 4 months ago

dragon-dan commented 4 months ago

版本: acl-3.6.1-6 使用wizard向导工具生成一个初始项目后 在linux编译运行

  const char* addrs = NULL;
  s_info("listen on: {}", addrs == NULL ? "NULL" : addrs);

  // 开始运行
  if (argc == 1 || (argc >= 2 && strcmp(argv[1], "alone") == 0)) {
    // 日志输出至标准输出
    acl::log::stdout_open(true);
    // 禁止生成 acl_master.log 日志
    acl::master_log_enable(true);

    // 测试时设置该值 > 0 则指定服务器处理客户端连接过程的
    // 会话总数(一个连接从接收到关闭称之为一个会话),当
    // 处理的连接会话数超过此值,测试过程结束;如果该值设
    // 为 0,则测试过程永远不结束
    unsigned int count = 0;

    // 测试过程中指定线程池最大线程个数
    unsigned int max_threads = 100;

    // 单独运行方式
    if (argc >= 3) {
      s_info("argc >= 3");
      ms.run_alone(addrs, argv[2], count, max_threads);
    }
    else {
      s_info("argc < 3");
      // addrs为NULL就会从配置文件中读取
      ms.run_alone(addrs, cfg_file, count, max_threads);
    }

    printf("Enter any key to exit now\r\n");
    getchar();
  }
  else 
  {
    s_info("else run_daemon");
      // acl_master 控制模式运行
    ms.run_daemon(argc, argv);
 }

run_alone 方式执行正常.

run_daemon 方式启动失败

[root@iZwz904izv5zpji57f9mp0Z act]# chmod +x ahserver
[root@iZwz904izv5zpji57f9mp0Z act]# ./ahserver daemon
[2024-05-06 19:49:19.038][m_sink:I][t:2872203|main.cpp:33] init_spdlog end.
[2024-05-06 19:49:19.038][m_sink:I][t:2872203|aclmain.cpp:117] aclmain start
[2024-05-06 19:49:19.038][m_sink:I][t:2872203|aclmain.cpp:168] listen on: NULL
[2024-05-06 19:49:19.038][m_sink:I][t:2872203|aclmain.cpp:202] else run_daemon
Aborted (core dumped)
[root@iZwz904izv5zpji57f9mp0Z act]# ./ahserver daemon zhserver.cf
[2024-05-06 20:00:49.211][m_sink:I][t:2876347|main.cpp:33] init_spdlog end.
[2024-05-06 20:00:49.211][m_sink:I][t:2876347|aclmain.cpp:117] aclmain start
[2024-05-06 20:00:49.212][m_sink:I][t:2876347|aclmain.cpp:168] listen on: NULL
[2024-05-06 20:00:49.212][m_sink:I][t:2876347|aclmain.cpp:202] else run_daemon
Aborted (core dumped)
[root@iZwz904izv5zpji57f9mp0Z act]#
zhengshuxin commented 4 months ago

alone 的运行方式是命令行运行方式,而 daemon运行模式是在 acl_master 服务框架下运行的,所以不能以命令行方式运行 daemon方式。

dragon-dan commented 4 months ago

run_daemon 服务框架下运行方式要怎么用呢,我想试一试,好像找不到示例。 如果不使用守护进程模式,生产环境使用是不是直接run_alone启动运行就可以了。

zhengshuxin commented 4 months ago

可以参考:https://acl-dev.cn/2023/06/10/using_master/https://acl-dev.cn/2023/05/27/using_wizard/ ,将你写的应用服务部署在 acl_master 服务管理框架下;另外,一般建议生产环境使用 acl_master 管理服务程序,run_alone 模式一般用在开发及测试阶段。

dragon-dan commented 4 months ago

看项目中acl_master 没有vs相关的工程文件,文档也没有windows平台的使用说明,是不是目前不支持windows平台, windows服务器上就只能用run_alone运行,或者用acl_proctl_deamon_init, acl_proctl_daemon_loop这些函数 自行实现守护进程

zhengshuxin commented 4 months ago

看项目中acl_master 没有vs相关的工程文件,文档也没有windows平台的使用说明,是不是目前不支持windows平台, windows服务器上就只能用run_alone运行,或者用acl_proctl_deamon_init, acl_proctl_daemon_loop这些函数 自行实现守护进程

是的,acl_master 只能运行在 Unix 平台上;在 windows 上 可以借助于 acl_proctl_daemon_xxx 类函数使用 alone 方式运行。

dragon-dan commented 4 months ago

明白了,谢谢郑老师