zoukankan      html  css  js  c++  java
  • 使用delphi-cross-socket 开发kbmmw smart http service

    前几天我说了使用delphi-cross-socket 扩展kbmmw 的跨平台支持,今天我说一下使用

    kbmMWCrossScoketHttpServerTransport 在linux 下支持 kbmmw 的samrt HTTP service.

    本例子基于以前的 使用delphi 10.2 开发linux 上的Daemon

    我们首先在dm 里面放置两个控件。

    加入我们的smart http service.

    连接linux 运行.

    在浏览器里面访问。

     在linux 里面查看进程

    大家可以看见这个后台进程。

    ok, 跨平台就这么任性。

    相关代码

    program Project2;
    
    {$APPTYPE CONSOLE}
    
    {$R *.res}
    uses
      Posix.Unistd,
      Posix.SysTypes,
      System.SysUtils,
      dmp in 'dmp.pas' {dmf: TDataModule},
      httpservice in 'httpservice.pas' {kbmMWCustomHTTPSmartService1: TkbmMWCustomHTTPSmartService};
    
    procedure daemon;
    
    begin
    
       dmf:=Tdmf.Create(nil);
       dmf.kbmmwserver1.AutoRegisterServices;
       dmf.kbmMWServer1.Active:=True;
      writeln('service started');
      try
    
        repeat
    
          sleep(10 * 1000);
    
        until False;
    
      finally
       dmf.Free;
      end;
    
    end;
    
    var
       pid: pid_t;
    
    begin
     
      pid := fork;
      if pid = 0 then
       begin
        writeln('starting service');
        daemon;
    
       end;
    
    end.
    unit httpservice;
    
    // =========================================================================
    // kbmMW - An advanced and extendable middleware framework.
    // by Components4Developers (http://www.components4developers.com)
    //
    // Service generated by kbmMW service wizard.
    //
    // INSTRUCTIONS FOR REGISTRATION/USAGE
    // -----------------------------------
    // Please update the uses clause of the datamodule/form the TkbmMWServer is placed on by adding services unit name 
    // to it. Eg.
    // 
    //     uses ...,kbmMWServer,YourServiceUnitName;
    // 
    // Somewhere in your application, make sure to register the serviceclass to the TkbmMWServer instance.
    // This can be done by registering the traditional way, or by using auto registration.
    // 
    // Traditional registration
    // ------------------------
    // var
    //    sd:TkbmMWCustomServiceDefinition;
    // ..
    //    sd:=kbmMWServer1.RegisterService(yourserviceclassname,false);
    // 
    // Set the last parameter to true if this is the default service.
    // 
    // 
    // Auto registration
    // -----------------
    // Make sure that your service class is tagged with the [kbmMW_Service] attribute.
    // Then auto register all tagged services:
    // ..
    //    kbmMWServer1.AutoRegisterServices;
    // 
    // -----------------------------------------------
    // 
    // SPECIFIC HTTP SERVICE REGISTRATION INSTRUCTIONS
    // -----------------------------------------------
    // Cast the returned service definition object (sd) to a TkbmMWHTTPServiceDefinition. eg:
    // 
    // var
    //    httpsd:TkbmMWHTTPServiceDefinition;
    // ..
    //    httpsd:=TkbmMWHTTPServiceDefinition(sd)
    //    httpsd.RootPath[mwhfcHTML]:='/';
    //    httpsd.RootPath[mwhfcImage]:='/images';
    //    httpsd.RootPath[mwhfcJavascript]:='/js';
    //    httpsd.RootPath[mwhfcStyleSheet]:='.';
    //    httpsd.RootPath[mwhfcOther]:='.';
    // -----------------------------------------------
    
    
    
    {$I kbmMW.inc}
    
    interface
    
    uses
      SysUtils,
    {$ifdef LEVEL6}
      Variants,
    {$else}
      Forms,
    {$endif}
      Classes,
      kbmMWSecurity,
      kbmMWServer,
      kbmMWServiceUtils,
      kbmMWGlobal,
      kbmMWCustomHTTPSmartService ,kbmMWHTTPUtils,
      kbmMWSmartServiceUtils,
      kbmMWRTTI;
    
    type
    
      [kbmMW_Service('name:xalionrest, flags:[listed]')]
      [kbmMW_Rest('path:/xalionrest')]
      // Access to the service can be limited using the [kbmMW_Auth..] attribute.
      // [kbmMW_Auth('role:[SomeRole,SomeOtherRole], grant:true')]
    
      //[kbmMW_HTTP('accept:[get], root:[media:"webfiles", html:"webfiles"]')]
      TkbmMWCustomHTTPSmartService1 = class(TkbmMWCustomHTTPSmartService)
      private
         { Private declarations }
      protected
         { Protected declarations }
      public
         { Public declarations }
         // HelloWorld function callable from both a regular client,
         // due to the optional [kbmMW_Method] attribute,
         // and from a REST client due to the optional [kbmMW_Rest] attribute.
         // The access path to the function from a REST client (like a browser)+
         // is in this case relative to the services path.
         // In this example: http://.../xalionhttp/helloworld
         // Access to the function can be limited using the [kbmMW_Auth..] attribute.
         // [kbmMW_Auth('role:[SomeRole,SomeOtherRole], grant:true')]
    
         [kbmMW_Rest('method:get, path:helloworld')]
         [kbmMW_Method]
         function HelloWorld:string;
    
         [kbmMW_Rest('method:get, path:version')]
         [kbmMW_Method]
         function version:string;
    
         [kbmMW_Method('EchoString')]       // 回应输入的串
         [kbmMW_Rest('method:get, path: ["echostring/{AString}","myechostring/{AString}" ]')]
         [kbmMW_Auth('role:[SomeRole,SomeOtherRole], grant:true')]
         function EchoString([kbmMW_Rest('value: "{AString}"')] const AString:string):string;
    
         [kbmMW_Method]
         [kbmMW_Rest('method:get, path: "cal/addnumbers"')]
         function AddNumbers([kbmMW_Rest('value: "$arg1", required: true')] const AValue1:integer;
                             [kbmMW_Rest('value: "$arg2", required: true')] const AValue2:integer;
                             [kbmMW_Arg(mwatRemoteLocation)] const ARemoteLocation:string):string;
    
    
    
         [kbmMW_Rest('method:post, path:postdata')]
         [kbmMW_Method]
         function postdata:string;
    
    
    
      end;
    
    implementation
    
    {%CLASSGROUP 'System.Classes.TPersistent'}
    
    uses kbmMWExceptions;
    
    {$R *.dfm}
    
    
    // Service definitions.
    //---------------------
    
    function TkbmMWCustomHTTPSmartService1.version: string;
    begin
          Result:='{"result":"'+self.Server.Version+':'+TOSversion.ToString  +'"}';
    end;
    
    function TkbmMWCustomHTTPSmartService1.AddNumbers(const AValue1,
      AValue2: integer; const ARemoteLocation: string):string;
    begin
          Result:='{"result":"'+(AValue1+AValue2).ToString+'"}';;
    end;
    
    
    function TkbmMWCustomHTTPSmartService1.EchoString(
      const AString: string): string;
    begin
         result:='{"result":"你好!'+astring+'"}';;
    end;
    
    function TkbmMWCustomHTTPSmartService1.HelloWorld:string;
    begin
         Result:='{"result":"Hello world"}';
    end;
  • 相关阅读:
    循环处理
    XMLHttpRequest 加载进度
    createjs 的 bitmapdata类
    console打印数组object具体内容
    html5 粒子组合成logo 的制作思路及方法
    createjs 更新
    css取消input、select默认样式(手机端)
    js获取url参数 兼容某些带#url
    Adobe Edge Animate CC 不再开发更新!
    《FLASH CC 2015 CANVAS 中文教程》——3、this关键字 入门
  • 原文地址:https://www.cnblogs.com/xalion/p/8404723.html
Copyright © 2011-2022 走看看