【问题标题】:I'd like to send a "Fire and Forget" query to a PHP page我想向 PHP 页面发送“一劳永逸”查询
【发布时间】:2010-11-14 12:28:42
【问题描述】:

我正在为客户端实现各种 PHP 和 ASP.NET Web 应用程序。

我想安装一个开销非常低的用户跟踪系统。 (它必须在 Intranet 上,这只是一个内部系统)。

我想做如下的事情:

line 1  normal code
line 2  normal code
line 3  Send Request/Query/Info to http://internal-IP/userTracker.php?Name=UserName&Page=...
line 4  Code that proceeds immediately after line 3 without waiting for a reply of any sort. 

“一劳永逸”似乎是这里最好的比喻。

有什么建议吗?

谢谢!

【问题讨论】:

  • 通常情况下,跟踪系统直到页面最后才会被调用,因此您不必担心等待回复。你有什么理由不能这样做吗?
  • 如果我不需要等待回复的要求得到满足,那么我可以将我的跟踪请求放在我想要的任何地方,甚至是在 php-include 页面中,或者在自定义 ASP.NET 控件中。的确,在我的具体情况下,我不需要这样做,但我喜欢以尽可能稳健的方式学习东西,以免将来遇到麻烦。

标签: php asp.net html http


【解决方案1】:

这几乎是 AJAX 的教科书案例。本质上,您向该 URL 发出一个 rqeuest,然后代码继续正常执行。

这是 jQuery 中的一个示例(假设您要发布到 URL)。其他库可能会有所不同。在没有任何 js 库的情况下这样做。

 //some code
 $.get("http://internal-IP/userTracker.php?Name=UserName", function() {
    //put something here if you want to verify the request worked.
 });
 //some more code

浏览器将触发请求,“更多代码”将继续执行而不阻塞请求。

【讨论】:

  • 我已经在使用 jquery 来做一些事情,比如对话框和日历控件。这个 get() 函数是否内置在标准 jquery javascript 文件中?感谢您的建议!
【解决方案2】:

理论一:如果可以避免,甚至不用费心用服务器代码执行请求。通常,人们使用不可见的“跟踪图像”,它只是一个带有 src="http://internal-IP/userTracker.php?Name=UserName&Page=..." 的 标签。这避免了试图让您的网络服务器直接与跟踪服务器通信的安全问题。它也比 ajax 更好,因为它适用于任何域组合。跟踪图像或 ajax 的问题是,如果您不希望您的用户直接访问跟踪服务器,而只想 ping 服务器到服务器...

理论二:避免 AJAX 和 IMG,只像您最初建议的那样使用服务器到服务器。这可能是更好的建议。您是在.NET 中编写此代码并将其发送到PHP 页面吗?如果是这样,上面的 .NET 代码会很好用。即使您不关心响应,我仍然会通过异常处理来解决它。

这就是我所拥有的。 :) 祝你好运!

【讨论】:

  • 感谢您的建议。不记得IMG方法我觉得有点愚蠢。我知道广告商为了这个特定目的而使用它。
【解决方案3】:

对于 asp.net,您可以使用异步 Web 请求,并且只使用一个在请求返回给您时不执行任何操作的虚拟方法(也许您想检查以确保它返回状态 200?)。

如果您想在后面的代码中执行此操作,这里有一个 C# 示例,但 thedz 发布的示例适用于 ASP.NET 和 PHP 页面。

void SendRequest(string uri)
{
    WebRequest request = HttpWebRequest.Create(uri);
    request.Method = "GET";
    request.BeginGetResponse(new AsyncCallback(ResponseReceived), null);
}
void ResponseReceived(IAsyncResult result)
{
    return;
}

【讨论】:

  • 与 jquery 或 IMG 标签相比有什么优势吗?
  • 如果您的站点的其余部分在 ASP.NET 中,并且您在后端做额外的工作,这更容易维护,并且可以导致更多的控制。然而,缺点是请求似乎来自您的服务器,而不是访问您的服务器的客户端,所以实际上这完全取决于您的即发即弃需要做什么。如果您正在记录客户信息,请使用 IMG 标签。如果您认为您需要回复,请使用 jquery。如果您想对用户隐藏像素命中,请使用后面的代码。
  • 这将比任何客户端(基于 AJAX/图像)方法更可靠。有时,用户会在您的 javascript 可以运行或您的图像可以加载之前终止导航(例如,如果他们点击链接、点击停止、关闭浏览器),导致您的统计信息无法注册该请求。如果您发送请求服务器端,您可以确定它会一直发送。
猜你喜欢
  • 2018-07-19
  • 2016-07-20
  • 2017-06-16
  • 1970-01-01
  • 2016-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多