Guten Morgen,
ist es beim ESP8266 möglich, nach dem user_tcp_recv callback einen
weiteren HTTP Request zum gleichen Ziel durchzuführen oder muss man erst
in den user_tcp_discon callback laufen und eine erneute TCP Verbindung
aufbauen? Bei mir läufts aktuell so:
Im user_tcp_connect callback rufe ich die Funktion für den ersten
Request auf:
1 | LOCAL void ICACHE_FLASH_ATTR
|
2 | user_tcp_connect_cb(void *arg)
|
3 | {
|
4 | struct espconn *pespconn = arg;
|
5 |
|
6 | espconn_regist_recvcb(pespconn, user_tcp_recv_cb);
|
7 | espconn_regist_sentcb(pespconn, user_tcp_sent_cb);
|
8 | espconn_regist_disconcb(pespconn, user_tcp_discon_cb);
|
9 |
|
10 | user_send_get_requests(pespconn);
|
11 | }
|
Nach der user_send_get_requests function springt der Controller eben
in den user_tcp_recv callback. Von dort rufe ich dann eine Funktion
auf, die einen weiteren Request durchführt:
1 | LOCAL void ICACHE_FLASH_ATTR
|
2 | user_tcp_recv_cb(void *arg, char *pusrdata, unsigned short length)
|
3 | {
|
4 | struct espconn *pespconn = (struct espconn *)arg;
|
5 | //unwichtiger Code entfernt
|
6 | user_send_request_temp(pespconn, returnObject[n].ID)
|
7 | }
|
Ich bekomme auf der seriellen Leitung keinen Error, also nehme ich mal
an, dass arg wirklich vom Typ espconn ist? In der Funktion sieht es
dann so aus:
1 | LOCAL void ICACHE_FLASH_ATTR
|
2 | user_send_request_temp(struct espconn *pespconn, char *reqID){
|
3 | //unwichtiger Code entfernt
|
4 | os_sprintf(pbuf,requestText,NET_DOMAIN);
|
5 | espconn_sent(pespconn, pbuf,os_strlen(pbuf));
|
6 | os_free(pbuf);
|
7 | }
|
Ich lasse mir den Request Text seriell ausgeben und der passt soweit,
trotzdem reagiert meine Website nicht darauf (wenn ich den Request
manuell durchführe, klappt alles. Bzw. der erste Request funktioniert
auch). Daher mein Verdacht, dass entweder der Parameter arg nicht vom
Typ espconn ist bzw. es eine andere Instanz ist oder das man keine 2
Requests durchführen kann ohne die Verbindung wieder zu schließen.
Okay, beim ersten Request bekomme ich das zurück:
1 | HTTP/1.1 200 OK
|
2 | Date: Sun, 04 Sep 2016 09:11:44 GMT
|
3 | Server: Apache/2.2.16 (Unix) mod_ssl/2.2.16 OpenSSL/0.9.8e-fips-rhel5 mod_bwlimited/1.4 mod_auth_passthrough/2.1 mod_wsgi/3.3 Python/2.7.1
|
4 | X-Powered-By: PHP/5.3.8
|
5 | Connection: close
|
6 | Content-Type: text/html
|
Anscheinend ist also die Verbindung bereits geschlossen. Wie öffne ich
die wieder?
Jede Tipp / Verbesserungsvorschlag ist willkommen!
Grüße