Skip to content

Latest commit

 

History

History
42 lines (36 loc) · 2.3 KB

README.md

File metadata and controls

42 lines (36 loc) · 2.3 KB

NebulaDynamic

  Nebula框架动态加载,NebulaDynamic项目下所有第一层子目录都可编译成动态库,编译后 的动态库拷贝到NebulaBootstrap的plugins插件目录下,修改NebulaBootstrap/conf的任 意一个基于Nebula的Server配置文件,启动对应Server即可完成动态加载。Server运行时不能直接替换 动态库,否则会引起进程coredump,这是由于程序运行时的正在使用的代码空间被改变所致,详细原因 这里不解释。若要运行时动态加载,需先卸载动态库,再完成so文件替换,然后重新加载动态库。动态 配置中的"load"和"version"就是做这个用途,Nebula提供了卸载动态库再重新加载功能。

  动态库的加载配置可以参考NebulaLogic.json配置文件。

    "dynamic_loading":[
      {
        "so_path":"plugins/logic/Hello.so", "load":true, "version": "1.0",
        "cmd":[
            {"cmd":65531, "class":"logic::CmdHello"}
        ],
        "module":[
            {"path":"/hello", "class":"inter::ModuleHello"}
        ],
        "session":[],
        "step":[]
      }
    ],

  配置文件中的"dynamic_loading"即动态库加载配置。其中:

  • so_pat 动态库相对于NebulaBootstrap根路径的相对路径。
  • load 是否动态加载,配置为false则不会被加载。
  • version 动态库版本。
  • cmd 动态库中包含并需要在动态库加载时创建的Cmd类。
    • cmd Cmd类对应的命令字。
    • class Cmd类的类名(需带上名字空间),用于通过反射机制从类名创建类实例。
  • module 动态库中包含并需要在动态库加载时创建的Module类。
    • path Module类对应的url location。
    • class Module类的类名(需带上名字空间),用于通过反射机制从类名创建类实例。
  • session 动态库中包含的session类名,用于动态库卸载时先回收动态库中已创建的session对象再卸载动态库。
  • step 动态库中包含的step类名,用于动态库卸载时先回收动态库中已创建的step对象再卸载动态库。

  动态库加载不成功的原因通常是so_path路径配置错误或路径下动态库不存在。