在Windows 7 x64上运行Python 2.7,Django 1.97。
在SSL模式下运行Django,似乎它会阻止任何新的Web请求,而另一个正在处理。它不是通过常规HTTP来做到这一点。为了确保我的代码不是什么问题,我创建了一个新项目并尝试了它并得到了相同的结果。
以下是您也可以构建的概念证明。
创建一个名为“testserver”的新项目。
在文件夹中创建一个“templates”文件夹,其中包含两个文件“index.html”和“bigfile.html”。使每个包含代表性文本,例如“这是索引”和“这是大文件页面”。
在settings.py中将这些内容添加到INSTALLED_APPS:
'sslserver',
'testserver'
现在在urls.py中添加:
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^$',"testserver.views.index"),
url(r'^bigrequest/$',"testserver.views.bigrequest"),
]
最后创建views.py并写下:
from django.shortcuts import render_to_response
import time
def index(request):
return render_to_response("testserver/index.html")
def bigrequest(request):
start_time=time.clock()
randomvar=0
while time.clock()-start_time<=30:
randomvar+=1
return render_to_response("testserver/bigrequest.html")
现在使用“python manage.py runserver”启动服务器NORMALLY。
打开服务器的主机名,无需任何其他网址(http://localhost:8000/)。它将显示索引。
现在打开http://localhost:8000/bigrequest/网页将需要30秒才能加载,然后正常显示bigrequest.html页面。现在这里是棘手的部分:尝试在bigrequest处理时重新加载索引。无论是否完成大请求,索引都会立即加载。
但是,现在尝试启动服务器IN SSL MODE的相同测试。做“python manage.py runsslserver”。再次加载bigrequest页面。在加载时,尝试打开索引。在完成大规模请求之前,索引不会响应。
正如您所猜测的那样,无法同时处理请求的服务器是一个非常糟糕的设置。但那我为什么要放弃SSL?
这里发生了什么?