如何使用“Session”对象?

问题描述 投票:0回答:1

Delphi 有没有办法拥有一个会话对象,我不必通过参数传递每个过程?

我收到一个网络呼叫,我有一个内部对象,它接收所有呼叫数据,还将接收结果和反馈数据。在此 Web 调用过程中可能使用的所有函数如何添加其输入,而不必将此对象(或对其的直接引用)传递给每个过程、函数或(最坏情况)属性?

全局变量当然不行,因为我可能会并行进行多个调用。 每个网络调用都是一个单独的线程(INDY),多线程中有什么可以帮助我的吗?

multithreading delphi session
1个回答
0
投票

您提到这些线程来自 Indy。如果您使用 Indy 的

TIdHTTPServer
,则可以启用其
SessionState
属性,让每个请求都有自己的与之关联的
TIdHTTPSession
对象。您可以在每个会话中存储您想要的任何内容。

但是,会话只能通过

TIdHTTPRequestInfo
TIdHTTPResponseInfo
对象访问,因此您仍然需要将内容传递给现有函数。在这种情况下,您可以考虑从
TIdHTTPSession
派生一个新类,并将函数改为类方法,然后可以使用
TIdHTTPServer.OnCreateSession
事件创建类的实例。这样,您的方法就可以根据需要更新调用会话。

© www.soinside.com 2019 - 2024. All rights reserved.