DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: tino0914
今日帖子: 30
在线用户: 15
导航: 论坛 -> Web应用开发 斑竹:bodies  
作者:
男 earthsbest (全能中间件) ▲▲▲▲△ -
普通会员
2018/12/7 11:28:06
标题:
使用 Delphi 10.3 Rio 和 RTC 编写 Linux WEB 服务 浏览:3188
加入我的收藏
楼主: 开发环境:Windows 10 1809 LTSC + VMware 15 + Ubuntu 18.04 LTS

环境配置很顺利,编译速度能感觉比 10.2 有进步。

代码如下:

program HttpServer4Linux;

{$APPTYPE CONSOLE}

uses
  SysUtils,
  rtcTypes,
  rtcConn,
  rtcDataSrv,
  rtcHttpSrv,
  rtcInfo,
  FireDAC.Comp.Client,
  FireDAC.Stan.Intf,
  FireDAC.Stan.Def,
  FireDAC.Phys.MySQLDef,
  FireDAC.Phys,
  FireDAC.Phys.MySQL,
  FireDAC.DApt,
  FireDAC.Stan.Async,
  FireDAC.Stan.Pool,
  rtcMW.System.RtcJsonHelper,
  rtcMW.Server.ObjectPooling in 'rtcMW.Server.ObjectPooling.pas';

var
  HttpServer: TRtcHttpServer;
  DataProvider: TRtcDataProvider;

const
  ConnectionString = 'Name=MySQLDemo;DriverID=MySQL;Database=testdb;'
     +'User_Name=root;Password=123456;Server=127.0.0.1;Port=3306;'
     +'Pooled=True;CharacterSet=utf8;';

begin
  HttpServer := TRtcHttpServer.Create(nil);
  DataProvider := TRtcDataProvider.Create(nil);
  try
    DataProvider.Server := HttpServer;
    DataProvider.OnCheckRequest := DataProvider.Anon(
      procedure(Sender: TRtcConnection)
      begin
        with Sender do
          if (Request.Method = 'GET') and (Request.ContentLength = 0) then
          if (Request.URI = '/cats') then
          Accept;
      end);
    DataProvider.OnDataReceived := DataProvider.Anon(
      procedure(Sender: TRtcConnection)
      var
        DBObject: TDBObject;
      begin
        with Sender do
        begin
          if Request.Complete then
          begin
          Response.ContentType := 'application/json';
          DBObject := DBPool.Acquire('MySQLDemo');
          try
          try
          DBObject.Query.Open('SELECT * FROM cats');
          //将查询的数据集转换为JSON发送到客户端
          WriteEx(DBObject.Query.ToJsonArray.toJSONEx);
          except
          on E: Exception do
          Write(E.Message);
          end;
          finally
          DBPool.Release(DBObject);
          end;
          end;
        end;

      end);

    HttpServer.OnRequestNotAccepted := HttpServer.Anon(
      procedure(Sender: TRtcConnection)
      begin
        with Sender do
        begin
          Response.Status(404, 'Not Found');
          Response.ContentType := 'text/plain';
          Write('Bad command.');
          Disconnect;
        end;
      end);
    HttpServer.OnListenStart := HttpServer.Anon(
      procedure(Sender: TRtcConnection)
      begin
        Writeln('RTC WEB 服务已启动.');
      end);
    HttpServer.OnListenStop := HttpServer.Anon(
      procedure(Sender: TRtcConnection)
      begin
        Writeln('RTC WEB 服务已停止.');
      end);
    HttpServer.OnListenError := HttpServer.Anon(
      procedure(Sender: TRtcConnection; E: Exception)
      begin
        Writeln('Server Error: ' + E.Message);
      end);

    // 创建数据库连接配置
    var ConnectionDef := FDManager.ConnectionDefs.Add;
    ConnectionDef.ParseString(ConnectionString);

    //配置数据连接对象池
    DBPool.OnCreateObject := procedure(Sender: TObject; var AObject: TDBObject)
      begin
        AObject := TDBObject.Create;
      end;

    DBPool.OnDestroyObject := procedure(Sender: TObject; var AObject: TDBObject)
      begin
        FreeAndNil(AObject);
      end;
    //启动连接池
    DBPool.Start();

    HttpServer.ServerPort := '9981';
    HttpServer.MultiThreaded := True;
    HttpServer.Listen();

    Writeln('按 <Enter> 退出 ...');
    Readln;
  finally
    DBPool.Stop;
    HttpServer.StopListenNow();
    FreeAndNil(HttpServer);
    FreeAndNil(DataProvider);
  end;

end.

浏览器运行效果:
此帖子包含附件:
PNG 图像
大小:846.4K
----------------------------------------------
Delphi4Linux Delphi三层/FireDAC 技术群:734515869 http://www.cnblogs.com/rtcmw
作者:
男 earthsbest (全能中间件) ▲▲▲▲△ -
普通会员
2018/12/7 11:31:24
1楼: 浏览器调用:
此帖子包含附件:
PNG 图像
大小:49.8K
----------------------------------------------
Delphi4Linux Delphi三层/FireDAC 技术群:734515869 http://www.cnblogs.com/rtcmw
作者:
男 go_on (go_on) ★☆☆☆☆ -
盒子活跃会员
2018/12/7 17:21:23
2楼: 请问楼主rtc支持linux吗? 在官网上没看到写支持? 是你自己改的?
----------------------------------------------
-
作者:
男 earthsbest (全能中间件) ▲▲▲▲△ -
普通会员
2018/12/7 18:17:07
3楼: @go_on
rtc 支持 Linux的,你可以编译 Examples\ConsoleServer 这个例子。
----------------------------------------------
Delphi4Linux Delphi三层/FireDAC 技术群:734515869 http://www.cnblogs.com/rtcmw
作者:
男 bbnn38 (伟大的咸鱼) ★☆☆☆☆ -
普通会员
2018/12/7 18:43:47
4楼: 可惜不支持ARM的UBUNTU,不然写个东西到树莓派3B+上挂着
----------------------------------------------
-
作者:
男 bahamut8348 (leonna) ★☆☆☆☆ -
普通会员
2018/12/8 1:19:45
5楼: 我真的很好奇,楼上到底啥需求会有拿arm做服务器的?
----------------------------------------------
--
作者:
男 bbnn38 (伟大的咸鱼) ★☆☆☆☆ -
普通会员
2018/12/8 8:14:17
6楼: @bahamut8348 做文件备份同步服务器,因为那个功耗非常低
----------------------------------------------
-
作者:
男 bahamut8348 (leonna) ★☆☆☆☆ -
普通会员
2018/12/8 9:16:30
7楼: 要做文件服务器直接装个群辉不就完了么?
简单的问题简单处理不就结了么?
----------------------------------------------
--
作者:
男 earthsbest (全能中间件) ▲▲▲▲△ -
普通会员
2018/12/8 10:04:59
8楼: 建了个 Delphi for Linux 的扣扣群,车牌号:734515869 欢迎上车。
----------------------------------------------
Delphi4Linux Delphi三层/FireDAC 技术群:734515869 http://www.cnblogs.com/rtcmw
作者:
男 bbnn38 (伟大的咸鱼) ★☆☆☆☆ -
普通会员
2020/4/11 15:41:53
9楼: @bahamut8348 我都穷到连电费都想省了,你还叫我买群晖…… 果然能用钱解决的事都是小事。
----------------------------------------------
-
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行101.5625毫秒 RSS