我们的Ruby on Rails应用程序的一些用户抱怨说,页面请求偶尔会在Safari下无限期挂起(一对夫妇在Firefox下注意到它,但它绝大多数都是Safari用户).经过一些调查后,我们的Rails应用程序似乎正确地提供了这些请求,并且在获取HTML中引用的图像资源(托管在同一服务器上)时发生挂起.
我们已将Apache配置为直接为图像资源提供服务,并绕过Rails应用程序以提高性能.我们还在text/javascript/css资产上启用了gzip压缩.以下是我们的Apache虚拟主机配置中的相关设置 - 也许我们已经以这样的方式配置了这可以解释这些任意挂起请求?
RewriteEngine On
# Correct behaviour of IE under SSL
SetEnvIf User-Agent ".*MSIE.*" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
SSLEngine On
SSLCertificateFile /etc/httpd/conf/ssl/_.mycert.com.crt
SSLCertificateKeyFile /etc/httpd/conf/ssl/_. mycert.com.key
SSLCertificateChainFile /etc/httpd/conf/ssl/gd_bundle.crt
RequestHeader set X_ORIGINAL_PROTOCOL 'https'
RequestHeader set X_FORWARDED_PROTO 'https'
# Rewrite index to check for static
RewriteRule ^/$ /index.html [QSA]
RewriteRule "^/(images|stylesheets|javascripts|system)/?(.*)" "$0" [L]
# Rewrite to check for Rails cached page
RewriteRule ^([^.]+)$ $1.html [QSA]
# Deflate
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/x-javascript
BrowserMatch ^Mozilla/4 …Run Code Online (Sandbox Code Playgroud) 我们尝试在我们公司的 ERP 中实现基于长轮询的通知服务。类似于 Facebook 通知。
使用的技术:
timeout设置为 60 秒和 1 秒sleep。经过近一个月的编码,我们进入了生产阶段。部署几分钟后,我们不得不回滚一切。事实证明,我们的服务器(8 核)无法处理来自 20 名员工的长请求,每个员工使用约 5 个浏览器选项卡。例如:用户使用我们的 ERP 打开了 3 个选项卡,每个选项卡上都有一个长轮询 AJAX。打开第 4 个选项卡是不可能的 - 它会挂起,直到前 3 个选项卡中的一个被杀死(因此 AJAX 停止)。
“Apache 的局限性”,我们认为。所以我们去谷歌搜索。我找到了一些关于 Apache 的 MPM 模块和配置的信息,所以我试了一下。我们的服务器使用preforkMPM,apachectl -l如图所示。所以我在配置中更改了几行,看起来像这样:
<IfModule mpm_prefork_module>
StartServers 1
MinSpareServers 16
MaxSpareServers 32
ServerLimit 50%
MaxClients 150
MaxClients 50%
MaxRequestsPerChild 0
</IfModule>
Run Code Online (Sandbox Code Playgroud)
有趣的是,它可以在我的本地机器上使用类似的配置运行。在服务器上,看起来 Apache 忽略了配置,因为MinSpareServers设置为 16,它在重新启动后启动 8。当他不知道该怎么做。
我们有一个JavaScript小部件,可以从URL加载数据.
为了减少往返,我想避免第二个HTTP请求并将数据放入HTML页面.
如果我可以保持JavaScript小部件保持不变,那将会很棒.
是否有URL方案从当前HTML页面读取数据?
示例:而不是https://....这个dom://....
我该怎么做$q.all但限制同时执行多少个promises?
我的问题就像我如何限制Q promise并发?
我希望一次产生的过程不超过5个
对于另一个问题,接受的答案是为了与Q一起工作而承诺的图书馆.但我特别感兴趣的是Angular的解决方案,而不是.$qQ
背景:问题正在解决:
我有两个步骤下载的文件:a)获取URL b)下载文件.
浏览器限制了可以同时检索多少文件,因此当直接使用promises时$q.all会触发所有下载,只有 N会立即发生,例如Chrome中的6,而其余文件会延迟.(请参阅浏览器中的Max并行http连接?)
问题是URL已过期,因此当浏览器执行第 N + 1次 文件下载时,URL不再有效.
所以我想做的事情throttled.all(6, promises)而不是$q.all(promise)
我有一个用例,我需要限制传出 http 请求的数量。是的,我确实在服务器端有速率限制器,但前端也需要限制活动 http 请求的数量。因此,我正在尝试实现一个滑动窗口协议,在任何时候我都会只有 n 个活跃请求。
这种使用 Rxjs 的方法通常工作得很好,请参见此处: https: //jsbin.com/pacicubeci/1/edit ?js,console,output
但我不清楚如何对 http 拦截器使用相同的逻辑。我的以下尝试在编译时失败,并出现以下错误:
“Subscription”类型缺少“Observable<HttpEvent>”类型中的以下属性:_isScalar、source、operator、lift 以及其他 114 个属性。(2740)
这样,我怎样才能返回一个可观察对象并同时在http拦截器中维护一个队列?我的方法有缺陷吗?我可以使用 http 拦截器来限制 http 速率吗?
@Injectable()
export class I1 implements HttpInterceptor {
intercept(
req: HttpRequest<any>,
next: HttpHandler
): Observable<HttpEvent<any>> {
const modified = req.clone({ setHeaders: { "Custom-Header-1": "1" } });
return next
.handle(req)
.do((ev: HttpEvent<any>) => {
if (ev instanceof HttpResponse) {
console.log(ev);
}
})
.pipe(
bufferTime(1000, null, 1),
filter(buffer => buffer.length > 0),
concatMap(buffer => of(buffer).pipe(delay(1000)))
)
.subscribe(console.log);
} …Run Code Online (Sandbox Code Playgroud) sliding-window rxjs angular-http-interceptors angular rxjs-subscriptions
我正在研究两个不同的WordPress网站,这些网站在许多方面相似,但皮肤不同.
例如,假设我正在处理两个"杂志"网站,它们共享相同的CSS布局,例如网格系统,边距等,但不同的CSS装饰属性,例如渐变,颜色,阴影.
让他们分享相同的基本CSS布局,但不同的装饰CSS的最佳方法是什么?
最初我觉得像......
<link rel="stylesheet" type="text/css" media="all" href="LINK-TO-BASE-CSS-ON-PRIMARY-DOMAIN.css" />
<link rel="stylesheet" type="text/css" media="all" href="<?php bloginfo( 'template_url' ); ?>/style.css" /> <!-- This would be the 'top-up' CSS -->
Run Code Online (Sandbox Code Playgroud)
这对我来说似乎并不特别干净.我承认,不过,也有一个非常类似的问题在这里.
这仍然被认为是最好的方式吗?链接到另一个域有什么缺点吗?我已经读过,由于跨域加载,这甚至可能是一个优势.
我有一个扩展程序,它在其后台页面中启动下载。当前的问题是,当您调用 chrome.downloads.download 时,例如 100 次,它将一次下载 5 个文件,直到所有 100 个文件都已下载。
我有一个像这样的简单动作:
[HttpGet]
public async Task<string> GetHtml()
{
Console.WriteLine("Run=======================================================");
await Task.Delay(5000);
Console.WriteLine("End=======================================================");
return "ok";
}
Run Code Online (Sandbox Code Playgroud)
我快速打开三个窗口,然后转到该 URL。我预计结果如下:
Run=======================================================
Run=======================================================
Run=======================================================
End=======================================================
End=======================================================
End=======================================================
Run Code Online (Sandbox Code Playgroud)
但是,事实并非如此!相反,结果是:
Run=======================================================
End=======================================================
Run=======================================================
End=======================================================
Run=======================================================
End=======================================================
Run Code Online (Sandbox Code Playgroud)
此外,当第一次运行完成后,第二次请求开始。为什么?
我有一个 Angular 应用程序,需要发送 N 个 XHTTP 请求,其中 1 <= N <= 10000。
应用程序需要尽可能快地处理它,因此最好同时有多个活动的 XHTTP 请求,并具有同时多个请求的滑动窗口。由于服务器端 API 限制,无法使用 WebSocket 或其他类似流式处理的解决方案。
我的第一个想法是使用RxJS forkJoin之类的东西,但我很难限制并发请求数。据我所知,API 对最大请求数有限制,例如Chrome 只允许 8 个并发请求。
我发现的大多数解决方案/教程要么 a.) 不限制最大并发连接数,要么 b.) 不动态更新(超时解决方案对此任务效率不高)。
例如:
const test = () =>
request(`https://swapi.co/api/people/1/`)
.pipe(
delay(1000),
switchMap(response => from(response.films)),
concatMap((url: string) => request(url).pipe(delay(1000))),
scan((acc, res) => [...acc, res.title], []),
tap(console.log)
)
.subscribe()
Run Code Online (Sandbox Code Playgroud)
这对我来说不好,因为限制是通过延迟实现的,但我想实现类似基于线程的解决方案:最多有 Y 个并发连接,如果一个连接完成,则立即启动一个新请求。
const test = () =>
request(`https://swapi.co/api/people/1/`)
.pipe{
switchMap(response => from(response.films)),
specialOperatorIAmLookingFor((url: string) => request(url), 8), // …Run Code Online (Sandbox Code Playgroud) angular ×2
apache ×2
rxjs ×2
ajax ×1
angularjs ×1
asp.net ×1
asp.net-core ×1
c# ×1
chromium ×1
concurrency ×1
cross-domain ×1
css ×1
dom ×1
javascript ×1
long-polling ×1
networking ×1
php ×1
promise ×1
safari ×1
url ×1
wordpress ×1