Delphi / FreePascal中是否有任何nginx头文件?
我有大约5000个用Delphi编写的Windows客户端,它们驻留在办公室局域网中,需要访问更新为“云”的新数据,基本上是2GB Windows 2003 VPS机器上托pipe的PHP(IIS)+复制MySQL网站。可以升级到2GB)。 最终用户可以通过Internet访问,这些用户更新的数据需要由位于办公室防火墙后面的Windows客户端使用。 注意:如果您问为什么防火墙后面的客户端 – 它们包含重要的公司信息。 由于客户端位于防火墙之后,客户端必须直接连接到VPS以下载数据更新。 有几种不同的连接方法,我可以想到: 1)。 套接字 :在Windows VPS上运行套接字服务器,并使每个5000个客户端不断地连接到套接字服务器。 优点 :没有第三方代码。 缺点 :低级别。 未知的可扩展性和稳定性,可以同时连接大量的客户端。 除非使用不稳定的Lazarus,否则暂时停留在Windows平台上。 2)。 RabbitMQ :在VPS上运行RabbitMQ(或同等产品),然后让5000个客户端中的每一个通过AMQP连接到RabbitMQ服务器。 在Windows VPS上,创build一个连接到RabbitMQ的Delphi应用程序,将由PHP插入的数据发送到MySQL。 优点 :发送数据,忘记 – 不需要使用MySQLpipe理队列。 缺点 :pipe理RabbitMQ的复杂性和可能的错误(特别是复制),而只使用简单的队列。 队列可能会使用大量的内存。 3)。 HTTP查询 :编程5000个客户端每隔5秒左右向VPS发送一个HTTP GET。 如果有更新,HTTP服务器将返回数据,如果没有更新,则发送“无数据”响应。 首先,IIS绝对不存在 – 即使5个用户正在下载文件,我现有的IIS也会挂起 – 几分钟后,IIS自行重置,不确定是IIS还是VPS。 我可能会使用Apache(或Nginx)+ PHP或创build一个自定义的Delphi HTTP服务器,如果这可以提高性能。 如果我使用PHP,我会为未读取数据的客户端创build一个标志文件(或使用Memcached?) – 这是为了防止在队列表上过多的MySQL查询。 对于自定义的Delphi HTTP服务器,我可以查询MySQL以每1秒将所有更改(对于所有客户端)加载到内存中。 优点 :简单易用,并且可以和Apache / PHP一起工作,所以我甚至可以在将来转换到Linux。 使用SSL轻松实现安全。 […]
环境:Ubuntu 12.04 LTS,Indy 10.5.9 rev 4885,Lazarus 1.0.4 / FPC 2.6.0。 用我简单的TIdHTTPServertesting程序,网页浏览器只显示最后一个字符('!'),而不是完整的响应,应该是'Hello world!'。 我可以看到在函数ToBytes ( ToBytes 6059行)传递的AValue参数中的文本仍然是正确的,ASrcEncoding是TIdASCIIEncoding和ADestEncoding是'ISO-8559-1'。 在执行6061行之后(LBytes:= TIdTextEncoding.Convert(ASrcEncoding,ADestEncoding,LBytes);)LBytes数组包含#33后跟零。 我的示例项目: program MyHTTPServer; uses cthreads, IdHTTPServer, IdCustomHTTPServer, IdContext, IdSocketHandle, IdGlobal, SysUtils; type TMyServer = class (TIdHTTPServer) public procedure InitComponent; override; procedure OnGet(AContext: TIdContext; ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo); end; procedure Demo; var Server: TMyServer; begin Server := TMyServer.Create(nil); […]
如何从Delphi 10.2东京创build的Linux控制台应用程序执行外部程序? 我想要做的就是执行一个带有参数的shell命令 /home/test/qrencode -o /tmp/abc.png '08154711' 我不需要程序的输出,但它应该同步执行。 在Windows环境下很容易,但在Delphi中(在Kylix之后)64位Linux支持是相当新的,现在我在Web上找不到任何提示。 任何提示帮助我解决这个问题,非常感谢。 提前致谢!
有人能告诉我如何编写以下代码在Linux bash脚本? procedure ParseLine(Line: String; var url, lang, Identifier: String); var p1,p2: Integer; Begin p1 := Pos(Char(VK_TAB),Line); p2 := PosEx(Char(VK_TAB),Line,p1+1); url := Copy(Line,1,p1-1); lang := Copy(Line,p1+1,p2 – (p1+1)); Identifier := Copy(Line,p2+1,Length(Line)); p1 := Pos('(',lang); lang := Copy(lang,1,p1-1); End; 我需要parsing的行看起来像这样 XXXXX \标签XXXX(XXX)\标签XXXX 谢谢。
我想知道是否有任何解决scheme来做到这一点。 有没有人? 大局:我想通过networking访问数据,使用我的delphi瘦客户端。 但我想保持我的服务器/服务写在帕斯卡尔。 “不太大”的图片:我试图写一个PHP来模拟一个SOAP Midas包到Delphi的ClientDataSets,但是我没有必要在我的大脑中使用这种强大的语言。 所以我可以尝试将dbexpress转换为FPC,但是我不知道这是否合法。 好伙计,我知道PHP,Java,C#/ ASP,Python,ORM和类似的事情可以帮助我,但我是一个GUI的家伙! 所有编写10000行报告的人都知道我在说什么。 我只是想指出我的肥皂连接到networking中的一些服务器(我没有拥有服务提供商),并让我的客户感到高兴。 简单…
在Kylix中,TEvent.WaitFor(Timeout)方法只接受$ FFFFFFFF的Timeout,否则会产生一个错误。 它在内部使用没有超时参数的sem_wait函数。 这有什么办法吗? 我需要设置一个超时参数。
我正在使用下面的代码。 我想隐藏应用程序,但在系统中显示它尝试(工作),但是当我尝试显示主窗体上的鼠标左键单击下,没有任何反应。 你们能帮忙吗? 我已经包含了所有的代码。 主要表格代码: unit Main_Unit; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls,shellApi,AppEvnts; type TMain = class(TForm) Edit1: TEdit; Button1: TButton; Button2: TButton; procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); private TrayIconData: TNotifyIconData; procedure TrayMessage(var Msg: TMessage); { Private declarations } public { Public declarations } end; var Main: TMain; […]
我正在开发复杂应用程序的多进程框架。 主机进程充当一个容器,一个或多个客户进程可以从中产生。 这样的访客进程的窗口重新映射到主机的窗口(例如笔记本tabSheet)。 (进程间通信在这里不是问题 – 它的工作原理)想象一下类似谷歌浏览器。 我已经阅读了许多有关在进程间重新设置窗口的答案,但我无法弄清楚在这种情况下发生了什么事情: 我的主机(容器)进程恰好在一些句柄上执行WaitForMultipleObjects ; 访客进程调用一个MessageBox ,但挂起。 访客进程是否不在单独的消息队列上运行? 我错过了什么? 我想我在embedded客户表单时遵循了有关SetParent的最佳指南: SetWindowLong(GuestHWnd, GWL_STYLE, GetWindowLong(GuestHWND, GWL_STYLE) and WS_EX_NOPARENTNOTIFY and (not WS_POPUP) or WS_CHILD); SetParent(GuestHWnd, HostHWnd); PostMessage(GuestHWnd, WM_UPDATEUISTATE, UIS_INITIALIZE, 0); SendMessage(HostHWnd, WM_UPDATEUISTATE, UIS_INITIALIZE, 0); SetWindowPos(GuestHWnd, 0, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE or SWP_NOZORDER or SWP_FRAMECHANGED); 还要注意,我还没有调用任何types的AttachThreadInput 。 如果主机未被阻止,或者如果访客窗口不是主机的子项(显然),则不会出现问题。 谢谢。
我正在使用下面的代码来查找转发的端口… Nat := CreateOleObject('HNetCfg.NATUPnP'); Ports := Nat.StaticPortMappingCollection; if not VarIsClear ( Ports ) then begin Enum := Ports._NewEnum; foreach := enum as IEnumVariant; while foreach.Next(1, Port, PDWORD(0)^) = 0 do begin Desc := Port.Description; //str Enabled := Port.Enabled; //bool ExtIP := Port.ExternalIPAddress;//str ExtPort := Port.ExternalPort; //int IntClient := Port.InternalClient; //str IntPort := Port.InternalPort; //int Protocol […]