我一直在尝试通过在raspberry pi 3上创建一个服务器来学习python和django,以接受来自房子周围的一些物联网项目的数据。
我已经设置了服务器并成功设法将数据发送到网址。但是,我发现POST请求大约需要1秒。如果我想要几个IoT设备将数据反馈给pi,这太慢了。
@csrf_exempt
def update(request):
if request.method == "POST":
key = request.POST.get("key", "")
if key == settings.API_KEY:
deviceID = request.POST.get("id", "")
format = request.POST.get("format", "")
datatype = request.POST.get("datatype", "")
data = request.POST.get("data", "")
fields = [format,datatype,data]
WriteFields(deviceID,fields)
return JsonResponse({"result": "received"})
else:
return JsonResponse({"error": "invalid_key"})
return JsonResponse({"error": "no_post"})
我运行了一个快速脚本来测试POST率
import requests
for i in range(100):
r = requests.post("http://heimdall:8000/sensors/update/", data={'key': 'testkey', 'id': '123456', 'format': 'temp', 'datatype': 'c', 'data': '12'})
print(r.status_code, r.reason)
django终端的时间戳显示每1秒的响应。为了消除pi是瓶颈,我在基于i3的Plex媒体服务器上运行了相同的django项目,我得到了类似的结果。
我还测试了从Windows cmd行使用CURL发送POST请求并查看相同的响应时间。这是POST的基本限制吗?或者问题可能出现在我的项目中?
更新
我从Update函数中删除了大部分代码并重新运行
@csrf_exempt
def update(request):
if request.method == "POST":
key = request.POST.get("key", "")
return JsonResponse({"test": "test"})
但回复率仍在1s左右
我还注意到有关使用aiohttp
的评论,我接下来会对此进行调查
我尝试在settings.py中设置DEBUG = False
,但没有任何更改。
UPDATE2
有趣的是,实际上在我的nodemcu esp8266 IoT设备上运行请求我没有看到这个延迟... Arduino控制台的串行输出不会暂停1秒,它仍然成功地从服务器读取响应。