За да отговоря на първата част от въпроса ви:Да, можете да правите асинхронни заявки с PHP , и дори игнорирайте отговора на услугата. Въпреки това, както правилно казвате, това не е супер страхотно решение.
Асинхронни заявки
Тази отлична публикация в блога за PHP Asynchronous Requests от Segment.io стига до няколко заключения:
- Можете да отворите сокет и да пишете в него , както е описано от тази тема за препълване на стека - Изглежда обаче, че това всъщност блокира и е доста бавно (300 ms в техните тестове).
- Можете да запишете в регистрационен файл и след това да го обработите по друг начин (по същество опашка, както описвате) - Това обаче изисква друг процес за четене на дневника и обработката му. Използването на файловата система може да е бавно и споделените файлове могат да причинят всякакви проблеми.
- Можете да разклоните cURL заявка - Това обаче означава, че не чакате отговор, така че ако SendGrid (или друга услуга) отговори с грешка, не можете да я хванете и да реагирате.
Земя на мненията
Сега навлизаме в страната на полумненията , но опашките, както описвате (като mySQL с cron задание, или текстов файл, или нещо друго) са склонни да бъдат много мащабируеми, тъй като можете да хвърлите работници на опашката, ако имате нужда да обработва по-бързо. Те могат да бъдат извън вашата потребителска система (и следователно да не споделят ресурси).
Опашки
С опашка ще имате отделна услуга който ще отговаря за изпращането на имейл със SendGrid (напр.). Ще изтегли задачи от опашката (напр. „изпрати имейл до Ник“) и след това ще ги изпълни.
Има няколко начина за внедряване на опашки, които можете да обработвате.
- Можете да напишете свой собствен - Тъй като изглежда искате да останете на PHP/mySQL, ако направите това, ще трябва да вземете под внимание куп проблеми с опашката и странни крайни случаи. Вие обаче ще имате абсолютен контрол и за просто приложение може би това ще проработи.
- Можете да приложите самостоятелно хоствана опашка със задачи - Целина е предназначен да бъде разпределена опашка със задачи, øMQ (ZeroMQ) и RabbitMQ могат да се използват и като опашки със задачи. Те са предназначени да бъдат бързи и разпространени и са вложени много мисли в тях. Трябва да ги сравните във вашата система, за да видите дали я ускоряват. Това също би означавало, че трябва сами да хоствате допълнителни парчета. Това обаче вероятно ще бъде най-бързото решение от комуникационна гледна точка.
- Можете да предавате неща на хоствана опашка със задачи - IronMQ и Amazon SQS и двете са страхотни хоствани решения, което означава, че няма да е необходимо да отделяте ресурси за тях, освен това с IronWorkers (напр.) бихте могли да поемете другата услуга. Тъй като обаче се опитвате да оптимизирате заявка към външна услуга, това вероятно не е решението в този сценарий.
Имейли на опашка
По темата за изпращането на имейли в опашка (по-специално), това е нещо обичайно за изпращачите на имейли. Както при всичко останало, това означава, че можете да имате по-добра надеждност (защото ако дадена услуга се провали, можете да я задържите на опашката и да опитате отново).
С имейл обаче има някои специфични услуги за подреждане на съобщения в опашка. Това са SMTP сървъри. Теоретично можете да настроите сървър като sendmail и след това задайте SendGrid като ваш "smarthost" или препредайте и накарайте сървъра да изпрати до SendGrid. След това се нарежда на опашка и се занимава с прекъсвания на услугата и изпраща поща с малко допълнителен код. Въпреки това , SMTP сървърите са трудни за работа, дори ако те просто препращат съобщения. Освен това SMTP е дори по-бавен от HTTP за установяване на връзка и следователно вероятно не е това, което искате, но е добре да знаете.