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;
  • 相关阅读:
    maven 构建 war文件&&Glassfish运行+部署war文件+访问(命令行模式)
    配置Glassfish服务器、部署Java web项目、Maven安装配置及JDK版本匹配性问题
    配置apache-maven-3.6.0时所遇到的坑(二)
    配置apache-maven-3.6.0时所遇到的坑(一)
    对Functional Language的认识
    论Injection的前世今生
    简单实现美团手机版应用源码
    WindowsPhone8可缩放图片控件的实现
    MallBuilder 多用户商城管理系统 v5.8.1.1
    Windows Phone 带文本信息的进度条
  • 原文地址:https://www.cnblogs.com/xalion/p/8404723.html
Copyright © 2011-2022 走看看