Kupuhipa
Ko taku paetukutuku, he mahi whakangahau ahau, i hangaia hei manaaki i nga wharangi kaainga me nga waahi whaiaro. I timata ahau ki tenei kaupapa i te timatanga o taku haerenga hootaka; i taua wa i miharo ahau ki te kimi i nga tohunga ngaio e tuhi ana mo ratou ano, mo o raatau mahi me o raatau kaupapa. Ko te tikanga o te hura i a raatau ake e mau tonu ana tae noa ki tenei ra: tata ki nga waahi hokohoko, ehara i te mea tino hokohoko, ka titiro tonu ahau ki te hiku ki te rapu hononga ki nga kaituhi.
Te whakatinanatanga o te whakaaro
Ko te putanga tuatahi he wharangi html noa iho i runga i taku paetukutuku whaiaro, ka hoatu e au nga hononga me nga hainatanga ki roto i te rarangi ul. I te patopato i nga wharangi 20 i roto i te waa, ka tiimata ahau ki te whakaaro kaore i tino whai hua tenei ka whakatau ahau ki te ngana ki te whakaaunoa i te mahi. I runga i te stackoverflow, i kite ahau he maha nga tangata e tohu ana i nga waahi kei roto i o raatau korero, no reira ka tuhia e ahau he parser ki te php, i haere noa i roto i nga korero, timata mai i te tuatahi (ko nga wahitau i runga i te SO tae noa ki tenei ra he penei: `/users/1` ), i tangohia nga hononga mai i te tohu e hiahiatia ana ka taapirihia ki SQLite.
Ka taea te kii ko te putanga tuarua: he kohinga o nga tekau mano o nga URL i roto i te ripanga SQLite, i whakakapi i te rarangi pateko i roto i te html. I rapu noa ahau i tenei rarangi. No te mea he URL anake, katahi ko te rapunga i runga noa iho.
I tenei wahanga ka whakarerea e ahau te kaupapa ka hoki mai ano ahau i muri i te wa roa. I tenei wa, kua neke atu i te toru tau taku wheako mahi, ka whakaaro ahau ka taea e au te mahi i tetahi mea nui ake. I tua atu, ko te hiahia nui ki te mohio ki nga hangarau hou.
Putanga hou
raruraru
Ko nga waahi hou ka taapirihia e te whakahau papatohu e mahi ana i enei e whai ake nei:
- Ka tango ihirangi ma te URL
- Ka tautuhi haki e tohu ana mena kei te waatea te HTTPS
- Ka pupuri i te mauri o te paetukutuku
- Ko te puna HTML me nga pane ka tiakina i roto i te hitori "taupu".
- Ka poroporoaki ihirangi, tango i te Taitara me te Whakaahuatanga
- Tiaki raraunga ki te kohinga motuhake
I ranea tenei ki te penapena noa i nga waahi ka whakaatu ki te raarangi:
Engari ko te whakaaro ki te whakariterite aunoa, ki te whakariterite me te whakariterite i nga mea katoa, kia mau tonu nga mea katoa, kaore i pai ki tenei tauira. Ahakoa te taapiri noa i tetahi tikanga paetukutuku hei taapiri i nga wharangi e hiahiatia ana te taapiri me te aukati hei karo i te DDoS.
I te nuinga o te waa, ko nga mea katoa ka taea te mahi i te wa kotahi, a ma te tikanga tukutuku ka taea e koe te tiaki noa i te URL kia mahia e te daemon nui nga mahi katoa mo nga URL mai i te rarangi. Heoi ano, ahakoa i konei ko te kupu "tutira" e whakaatu ana i a ia ano. A, ki te whakatinanahia he rarangi, katahi ka taea te wehewehe i nga mahi katoa me te mahi i te kore tukutahi.
whakatau
Whakaritehia nga rarangi me te hanga i tetahi punaha whakahaere-a-takahanga mo te tukatuka i nga mahi katoa. A kua roa ahau e hiahia ana ki te whakamatau i nga Redis Streams.
Te whakamahi i nga awa Redis i te PHP
No te mea I te mea ehara taku anga i tetahi o nga roroa e toru a Symfony, Laravel, Yii, ka hiahia ahau ki te kimi whare pukapuka motuhake. Engari, i te mea i puta (i te whakamatautau tuatahi), kaore e taea te kimi whare pukapuka tino nui. Ko nga mea katoa e pa ana ki nga rarangi he kaupapa mai i te 3 i mahia e rima tau ki muri, kua herea ranei ki te anga.
He maha nga korero kua rongo ahau mo Symfony hei kaiwhakarato o nga waahanga whai hua takitahi, a kua whakamahia e au etahi o enei. Ka taea hoki te whakamahi etahi mea mai i Laravel, hei tauira i a raatau ORM, me te kore o te anga ake.
symfony/messenger
Ko te kaitono tuatahi he ahua pai tonu me te kore e ruarua ka whakauruhia e ahau. Engari he uaua ake ki te google nga tauira o te whakamahi i waho o Symfony. Me pehea te kohi pahi mo te tuku karere mai i te roopu o nga karaehe me nga ingoa o te ao, kore tikanga, tae atu ki a Redis?
Ko nga tuhinga i runga i te paetukutuku mana he tino taipitopito, engari ko te timatanga i whakaahuahia mo Symfony ma te whakamahi i a raatau YML tino pai me etahi atu tikanga makutu mo te hunga kore-symphonist. Kaore au i aro ki te mahi whakaurunga ake, ina koa i nga hararei o te Tau Hou. Engari me mahi tenei mo te wa roa ohorere.
Ko te ngana ki te whakaaro me pehea te whakaputa i tetahi punaha ma te whakamahi i nga punawai Symfony ehara i te mea iti rawa mo te wa kati:
I muri i te ruku ki enei mea katoa me te ngana ki te mahi i tetahi mea me oku ringa, ka tae ahau ki te whakatau kei te mahi ahau i etahi momo tootoo ka whakatau ahau ki te whakamatau i tetahi atu mea.
whakamarama/tutira
I puta mai ko tenei whare pukapuka i tino herea ki te hanganga Laravel me te tini o etahi atu whakawhirinakitanga, no reira kaore au i whakapau i te waa ki runga: I whakauruhia e ahau, ka tirohia, ka kite i nga whakawhirinakitanga ka mukua.
yiisoft/yii2-tutira
Ae, i konei i mau tonu mai i te ingoa, ano, he hononga tino ki Yii2. Me whakamahi ahau i tenei whare pukapuka kaore he kino, engari kaore au i whakaaro mo te mea ka whakawhirinaki katoa ki a Yii2.
Te toenga
Ko nga mea katoa i kitea e au i runga i te GitHub he kaupapa kore pono, he tawhito me te whakarere i nga kaupapa kaore he whetu, he marau me te maha o nga mahi.
Hoki atu ki te symfony/messenger, nga korero hangarau
Me whai whakaaro ahau ki tenei whare pukapuka, a, i muri i te whakapau i etahi wa, ka taea e au. I puta mai he tino poto me te ngawari nga mea katoa. Hei whakamohio i te pahi, i hanga e ahau he wheketere iti, na te mea... Ko te tikanga he maha aku tupare me nga kaikawe rereke.
He torutoru noa nga taahiraa:
- Ka waihangahia e matou nga kaikawe karere me waea noa
- Ka takai matou ki te HandlerDescriptor (akomanga mai i te whare pukapuka)
- Ka takai matou i enei "Whakaahua" ki tetahi tauira HandlersLocator
- Tāpiri HandlersLocator ki te tauira MessageBus
- Ka tukuna e matou he huinga o `SenderInterface` ki te SendersLocator, i roto i taku keehi o nga karaehe `RedisTransport`, he mea whirihora ma te marama.
- Te taapiri SendersLocator ki te tauira MessageBus
He tikanga `->dispatch()` a MessageBus e rapu ana i nga kaikawe tika i roto i te HandlersLocator ka tuku i te karere ki a ratou, ma te whakamahi i te `SenderInterface` ki te tuku ma te pahi (Redis streams).
I roto i te whirihoranga ipu (i tenei keehi php-di), ka taea te whirihora i tenei paihere katoa penei:
CONTAINER_REDIS_TRANSPORT_SECRET => function (ContainerInterface $c) {
return new RedisTransport(
$c->get(CONTAINER_REDIS_STREAM_CONNECTION_SECRET),
$c->get(CONTAINER_SERIALIZER))
;
},
CONTAINER_REDIS_TRANSPORT_LOG => function (ContainerInterface $c) {
return new RedisTransport(
$c->get(CONTAINER_REDIS_STREAM_CONNECTION_LOG),
$c->get(CONTAINER_SERIALIZER))
;
},
CONTAINER_REDIS_STREAM_RECEIVER_SECRET => function (ContainerInterface $c) {
return new RedisReceiver(
$c->get(CONTAINER_REDIS_STREAM_CONNECTION_SECRET),
$c->get(CONTAINER_SERIALIZER)
);
},
CONTAINER_REDIS_STREAM_RECEIVER_LOG => function (ContainerInterface $c) {
return new RedisReceiver(
$c->get(CONTAINER_REDIS_STREAM_CONNECTION_LOG),
$c->get(CONTAINER_SERIALIZER)
);
},
CONTAINER_REDIS_STREAM_BUS => function (ContainerInterface $c) {
$sendersLocator = new SendersLocator([
AppMessagesSecretJsonMessages::class => [CONTAINER_REDIS_TRANSPORT_SECRET],
AppMessagesDaemonLogMessage::class => [CONTAINER_REDIS_TRANSPORT_LOG],
], $c);
$middleware[] = new SendMessageMiddleware($sendersLocator);
return new MessageBus($middleware);
},
CONTAINER_REDIS_STREAM_CONNECTION_SECRET => function (ContainerInterface $c) {
$host = 'bu-02-redis';
$port = 6379;
$dsn = "redis://$host:$port";
$options = [
'stream' => 'secret',
'group' => 'default',
'consumer' => 'default',
];
return Connection::fromDsn($dsn, $options);
},
CONTAINER_REDIS_STREAM_CONNECTION_LOG => function (ContainerInterface $c) {
$host = 'bu-02-redis';
$port = 6379;
$dsn = "redis://$host:$port";
$options = [
'stream' => 'log',
'group' => 'default',
'consumer' => 'default',
];
return Connection::fromDsn($dsn, $options);
},
I konei ka kite koe i roto i te SendersLocator kua tohua e matou etahi "whakawhitinga" rereke mo nga karere rereke e rua, kei a ia ano tona hononga ki nga awa e rite ana.
I hanga e au he kaupapa demo motuhake e whakaatu ana i te tono o nga daemon e toru e korero ana ki a raua ma te whakamahi i te pahi e whai ake nei:
Engari ka whakaatu ahau ki a koe me pehea te hanganga o te kaihoko:
use AppMessagesDaemonLogMessage;
use SymfonyComponentMessengerHandlerHandlerDescriptor;
use SymfonyComponentMessengerHandlerHandlersLocator;
use SymfonyComponentMessengerMessageBus;
use SymfonyComponentMessengerMiddlewareHandleMessageMiddleware;
use SymfonyComponentMessengerMiddlewareSendMessageMiddleware;
use SymfonyComponentMessengerTransportSenderSendersLocator;
require_once __DIR__ . '/../vendor/autoload.php';
/** @var PsrContainerContainerInterface $container */
$container = require_once('config/container.php');
$handlers = [
DaemonLogMessage::class => [
new HandlerDescriptor(
function (DaemonLogMessage $m) {
error_log('DaemonLogHandler: message handled: / ' . $m->getMessage());
},
['from_transport' => CONTAINER_REDIS_TRANSPORT_LOG]
)
],
];
$middleware = [];
$middleware[] = new HandleMessageMiddleware(new HandlersLocator($handlers));
$sendersLocator = new SendersLocator(['*' => [CONTAINER_REDIS_TRANSPORT_LOG]], $container);
$middleware[] = new SendMessageMiddleware($sendersLocator);
$bus = new MessageBus($middleware);
$receivers = [
CONTAINER_REDIS_TRANSPORT_LOG => $container->get(CONTAINER_REDIS_STREAM_RECEIVER_LOG),
];
$w = new SymfonyComponentMessengerWorker($receivers, $bus, $container->get(CONTAINER_EVENT_DISPATCHER));
$w->run();
Te whakamahi i tenei hanganga i roto i te tono
I te whakatinanatanga o te pahi i taku tuara, ka wehea e au nga waahanga takitahi mai i te whakahau tukutahi tawhito me te hanga i nga kaikawe motuhake, ma ia tangata e mahi i a raatau ake mahi.
Ko te ahua o te paipa mo te taapiri i tetahi waahi hou ki te putunga korero penei:
I muri tonu mai i tera, kua maamaa ake ki ahau te taapiri i nga mahi hou, hei tauira, te tango me te tarai Rss. No te mea Ko tenei tukanga e hiahia ana ki te ihirangi taketake, katahi ka ohauru te kaihautu tango hononga RSS, penei i a WebsiteIndexHistoryPersistor, ki te karere "Ihirangi/HtmlContent", ka tukatukahia, ka tukuna atu te karere e hiahiatia ana ki runga i tana paipa.
I te mutunga, ka mutu he maha nga daemons, e pupuri ana i ia hononga ki nga rauemi e tika ana. Hei tauira he rewera ngokingoki kei roto nga kaikawe katoa e hiahia ana ki te haere ki te Ipurangi mo te ihirangi, me te daemon tohe tonu e pupuri ana i tetahi hononga ki te patengi raraunga.
Inaianei, hei utu mo te kowhiri mai i te paataka raraunga, ko nga id e hiahiatia ana i muri i te whakaurunga a te kaitoi ka tukuna noa ma te pahi ki nga kaikawe katoa.
Source: will.com