[{"data":1,"prerenderedAt":1292},["ShallowReactive",2],{"navigation_docs_hu":3,"-hu-notify-broadcast":442,"-hu-notify-broadcast-surround":1287},[4,45,60,81,112,129,146,173,197,213,242,280,357,373,385,404,430],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":44},"Kezdő lépések","i-lucide-rocket","\u002Fhu\u002Fgetting-started","hu\u002F1.getting-started",[10,15,20,24,29,34,39],{"title":11,"path":12,"stem":13,"icon":14},"Bevezetés","\u002Fhu\u002Fgetting-started\u002Fintroduction","hu\u002F1.getting-started\u002F1.introduction","i-lucide-house",{"title":16,"path":17,"stem":18,"icon":19},"Laravelből érkezőknek","\u002Fhu\u002Fgetting-started\u002Fcoming-from-laravel","hu\u002F1.getting-started\u002F2.coming-from-laravel","i-lucide-arrow-right-left",{"title":21,"path":22,"stem":23,"icon":19},"Symfonyból érkezőknek","\u002Fhu\u002Fgetting-started\u002Fcoming-from-symfony","hu\u002F1.getting-started\u002F3.coming-from-symfony",{"title":25,"path":26,"stem":27,"icon":28},"Telepítés","\u002Fhu\u002Fgetting-started\u002Finstallation","hu\u002F1.getting-started\u002F4.installation","i-lucide-download",{"title":30,"path":31,"stem":32,"icon":33},"Az első modulod","\u002Fhu\u002Fgetting-started\u002Ffirst-module","hu\u002F1.getting-started\u002F5.first-module","i-lucide-package-plus",{"title":35,"path":36,"stem":37,"icon":38},"Projektstruktúra","\u002Fhu\u002Fgetting-started\u002Fproject-structure","hu\u002F1.getting-started\u002F6.project-structure","i-lucide-folder-tree",{"title":40,"path":41,"stem":42,"icon":43},"A shop mintaalkalmazás","\u002Fhu\u002Fgetting-started\u002Fsample-app","hu\u002F1.getting-started\u002F7.sample-app","i-lucide-shopping-cart",false,{"title":46,"icon":47,"path":48,"stem":49,"children":50,"page":44},"queue","i-lucide-layers","\u002Fhu\u002Fqueue","hu\u002F10.queue",[51,56],{"title":52,"path":53,"stem":54,"icon":55},"Áttekintés","\u002Fhu\u002Fqueue\u002Foverview","hu\u002F10.queue\u002F1.overview","i-lucide-list-ordered",{"title":57,"path":58,"stem":59,"icon":47},"Taskok","\u002Fhu\u002Fqueue\u002Ftasks","hu\u002F10.queue\u002F2.tasks",{"title":61,"icon":62,"path":63,"stem":64,"children":65,"page":44},"events","i-lucide-workflow","\u002Fhu\u002Fevents","hu\u002F11.events",[66,71,76],{"title":67,"path":68,"stem":69,"icon":70},"Események","\u002Fhu\u002Fevents\u002Foverview","hu\u002F11.events\u002F1.overview","i-lucide-radio",{"title":72,"path":73,"stem":74,"icon":75},"Outbox","\u002Fhu\u002Fevents\u002Foutbox","hu\u002F11.events\u002F2.outbox","i-lucide-inbox",{"title":77,"path":78,"stem":79,"icon":80},"Ütemezés","\u002Fhu\u002Fevents\u002Fscheduler","hu\u002F11.events\u002F3.scheduler","i-lucide-calendar-clock",{"title":82,"icon":83,"path":84,"stem":85,"children":86,"page":44},"auth","i-lucide-shield-check","\u002Fhu\u002Fauth","hu\u002F12.auth",[87,92,97,102,107],{"title":88,"path":89,"stem":90,"icon":91},"Autentikáció","\u002Fhu\u002Fauth\u002Foverview","hu\u002F12.auth\u002F1.overview","i-lucide-key-round",{"title":93,"path":94,"stem":95,"icon":96},"RBAC","\u002Fhu\u002Fauth\u002Frbac","hu\u002F12.auth\u002F2.rbac","i-lucide-users",{"title":98,"path":99,"stem":100,"icon":101},"Policy-k","\u002Fhu\u002Fauth\u002Fpolicy","hu\u002F12.auth\u002F3.policy","i-lucide-gavel",{"title":103,"path":104,"stem":105,"icon":106},"Az auth önálló használata","\u002Fhu\u002Fauth\u002Fstandalone","hu\u002F12.auth\u002F4.standalone","i-lucide-plug",{"title":108,"path":109,"stem":110,"icon":111},"Social login goth-tal, önállóan","\u002Fhu\u002Fauth\u002Fsocial-standalone","hu\u002F12.auth\u002F5.social-standalone","i-lucide-log-in",{"title":113,"icon":114,"path":115,"stem":116,"children":117,"page":44},"mail","i-lucide-mail","\u002Fhu\u002Fmail","hu\u002F13.mail",[118,121,125],{"title":52,"path":119,"stem":120,"icon":114},"\u002Fhu\u002Fmail\u002Foverview","hu\u002F13.mail\u002F1.overview",{"title":122,"path":123,"stem":124,"icon":114},"SMTP","\u002Fhu\u002Fmail\u002Fsmtp","hu\u002F13.mail\u002F2.smtp",{"title":126,"path":127,"stem":128,"icon":114},"MJML","\u002Fhu\u002Fmail\u002Fmjml","hu\u002F13.mail\u002F3.mjml",{"title":130,"icon":131,"path":132,"stem":133,"children":134,"page":44},"notify","i-lucide-bell","\u002Fhu\u002Fnotify","hu\u002F14.notify",[135,138,142],{"title":52,"path":136,"stem":137,"icon":131},"\u002Fhu\u002Fnotify\u002Foverview","hu\u002F14.notify\u002F1.overview",{"title":139,"path":140,"stem":141,"icon":131},"Database csatorna","\u002Fhu\u002Fnotify\u002Fdatabase","hu\u002F14.notify\u002F2.database",{"title":143,"path":144,"stem":145,"icon":131},"Broadcast csatorna","\u002Fhu\u002Fnotify\u002Fbroadcast","hu\u002F14.notify\u002F3.broadcast",{"title":147,"icon":148,"path":149,"stem":150,"children":151,"page":44},"storage","i-lucide-hard-drive","\u002Fhu\u002Fstorage","hu\u002F15.storage",[152,155,159,163,168],{"title":52,"path":153,"stem":154,"icon":148},"\u002Fhu\u002Fstorage\u002Foverview","hu\u002F15.storage\u002F1.overview",{"title":156,"path":157,"stem":158},"Disk API","\u002Fhu\u002Fstorage\u002Fdisk-api","hu\u002F15.storage\u002F2.disk-api",{"title":160,"path":161,"stem":162,"icon":148},"Memória és helyi lemez","\u002Fhu\u002Fstorage\u002Flocal","hu\u002F15.storage\u002F3.local",{"title":164,"path":165,"stem":166,"icon":167},"S3","\u002Fhu\u002Fstorage\u002Fs3","hu\u002F15.storage\u002F4.s3","i-lucide-cloud",{"title":169,"path":170,"stem":171,"icon":172},"Tesztelés","\u002Fhu\u002Fstorage\u002Ftesting","hu\u002F15.storage\u002F5.testing","i-lucide-flask-conical",{"title":174,"icon":175,"path":176,"stem":177,"children":178,"page":44},"telemetry","i-lucide-activity","\u002Fhu\u002Ftelemetry","hu\u002F16.telemetry",[179,182,187,192],{"title":52,"path":180,"stem":181,"icon":175},"\u002Fhu\u002Ftelemetry\u002Foverview","hu\u002F16.telemetry\u002F1.overview",{"title":183,"path":184,"stem":185,"icon":186},"Logolás","\u002Fhu\u002Ftelemetry\u002Flogging","hu\u002F16.telemetry\u002F2.logging","i-lucide-scroll-text",{"title":188,"path":189,"stem":190,"icon":191},"OpenTelemetry","\u002Fhu\u002Ftelemetry\u002Fopentelemetry","hu\u002F16.telemetry\u002F3.opentelemetry","i-lucide-radar",{"title":193,"path":194,"stem":195,"icon":196},"Sentry","\u002Fhu\u002Ftelemetry\u002Fsentry","hu\u002F16.telemetry\u002F4.sentry","i-lucide-bug",{"title":198,"icon":199,"path":200,"stem":201,"children":202,"page":44},"Referencia","i-lucide-book-open","\u002Fhu\u002Freference","hu\u002F17.reference",[203,208],{"title":204,"path":205,"stem":206,"icon":207},"Konfiguráció","\u002Fhu\u002Freference\u002Fconfiguration","hu\u002F17.reference\u002F1.configuration","i-lucide-settings",{"title":209,"path":210,"stem":211,"icon":212},"Külső függőségek","\u002Fhu\u002Freference\u002Fdependencies","hu\u002F17.reference\u002F2.dependencies","i-lucide-package",{"title":214,"icon":215,"path":216,"stem":217,"children":218,"page":44},"Koncepciók","i-lucide-lightbulb","\u002Fhu\u002Fconcepts","hu\u002F2.concepts",[219,223,228,232,237],{"title":220,"path":221,"stem":222,"icon":47},"Architektúra","\u002Fhu\u002Fconcepts\u002Farchitecture","hu\u002F2.concepts\u002F1.architecture",{"title":224,"path":225,"stem":226,"icon":227},"Hibamodell","\u002Fhu\u002Fconcepts\u002Ferror-model","hu\u002F2.concepts\u002F2.error-model","i-lucide-shield-alert",{"title":204,"path":229,"stem":230,"icon":231},"\u002Fhu\u002Fconcepts\u002Fconfiguration","hu\u002F2.concepts\u002F3.configuration","i-lucide-settings-2",{"title":233,"path":234,"stem":235,"icon":236},"Codegen pipeline","\u002Fhu\u002Fconcepts\u002Fcodegen-pipeline","hu\u002F2.concepts\u002F4.codegen-pipeline","i-lucide-file-json",{"title":238,"path":239,"stem":240,"icon":241},"Design patternek","\u002Fhu\u002Fconcepts\u002Fdesign-patterns","hu\u002F2.concepts\u002F5.design-patterns","i-lucide-puzzle",{"title":243,"icon":244,"path":245,"stem":246,"children":247,"page":44},"A kit","i-lucide-box","\u002Fhu\u002Fkit","hu\u002F3.kit",[248,252,257,262,267,271,276],{"title":249,"path":250,"stem":251,"icon":244},"A kit áttekintése","\u002Fhu\u002Fkit\u002Foverview","hu\u002F3.kit\u002F1.overview",{"title":253,"path":254,"stem":255,"icon":256},"Alkalmazás-életciklus","\u002Fhu\u002Fkit\u002Fapp","hu\u002F3.kit\u002F2.app","i-lucide-power",{"title":258,"path":259,"stem":260,"icon":261},"Szerver","\u002Fhu\u002Fkit\u002Fserver","hu\u002F3.kit\u002F3.server","i-lucide-server",{"title":263,"path":264,"stem":265,"icon":266},"Worker","\u002Fhu\u002Fkit\u002Fworker","hu\u002F3.kit\u002F4.worker","i-lucide-cog",{"title":268,"path":269,"stem":270,"icon":70},"Realtime","\u002Fhu\u002Fkit\u002Frealtime","hu\u002F3.kit\u002F5.realtime",{"title":272,"path":273,"stem":274,"icon":275},"Migrációk","\u002Fhu\u002Fkit\u002Fmigrations","hu\u002F3.kit\u002F6.migrations","i-lucide-file-stack",{"title":277,"path":278,"stem":279,"icon":111},"Social login","\u002Fhu\u002Fkit\u002Fsocial-login","hu\u002F3.kit\u002F7.social-login",{"title":281,"icon":282,"path":283,"stem":284,"children":285,"page":44},"CLI referencia","i-lucide-terminal","\u002Fhu\u002Fcli","hu\u002F4.cli",[286,289,294,299,304,309,314,319,324,329,334,338,343,348,352],{"title":52,"path":287,"stem":288,"icon":282},"\u002Fhu\u002Fcli\u002Foverview","hu\u002F4.cli\u002F1.overview",{"title":290,"path":291,"stem":292,"icon":293},"add db","\u002Fhu\u002Fcli\u002Fadd-db","hu\u002F4.cli\u002F10.add-db","i-lucide-database-zap",{"title":295,"path":296,"stem":297,"icon":298},"add compose \u002F add docker","\u002Fhu\u002Fcli\u002Fadd-compose","hu\u002F4.cli\u002F11.add-compose","i-lucide-container",{"title":300,"path":301,"stem":302,"icon":303},"add mail","\u002Fhu\u002Fcli\u002Fadd-mail","hu\u002F4.cli\u002F12.add-mail","i-lucide-mail-plus",{"title":305,"path":306,"stem":307,"icon":308},"add notification","\u002Fhu\u002Fcli\u002Fadd-notification","hu\u002F4.cli\u002F13.add-notification","i-lucide-bell-plus",{"title":310,"path":311,"stem":312,"icon":313},"add realtime","\u002Fhu\u002Fcli\u002Fadd-realtime","hu\u002F4.cli\u002F14.add-realtime","i-lucide-radio-tower",{"title":315,"path":316,"stem":317,"icon":318},"add seeder","\u002Fhu\u002Fcli\u002Fadd-seeder","hu\u002F4.cli\u002F15.add-seeder","i-lucide-sprout",{"title":320,"path":321,"stem":322,"icon":323},"new project","\u002Fhu\u002Fcli\u002Fnew-project","hu\u002F4.cli\u002F2.new-project","i-lucide-folder-plus",{"title":325,"path":326,"stem":327,"icon":328},"new module","\u002Fhu\u002Fcli\u002Fnew-module","hu\u002F4.cli\u002F3.new-module","i-lucide-blocks",{"title":330,"path":331,"stem":332,"icon":333},"add surface","\u002Fhu\u002Fcli\u002Fadd-surface","hu\u002F4.cli\u002F4.add-surface","i-lucide-layers-2",{"title":335,"path":336,"stem":337,"icon":244},"add core","\u002Fhu\u002Fcli\u002Fadd-core","hu\u002F4.cli\u002F5.add-core",{"title":339,"path":340,"stem":341,"icon":342},"add handler","\u002Fhu\u002Fcli\u002Fadd-handler","hu\u002F4.cli\u002F6.add-handler","i-lucide-webhook",{"title":344,"path":345,"stem":346,"icon":347},"new migration","\u002Fhu\u002Fcli\u002Fnew-migration","hu\u002F4.cli\u002F7.new-migration","i-lucide-file-plus",{"title":349,"path":350,"stem":351,"icon":266},"worker generátorok","\u002Fhu\u002Fcli\u002Fworker-generators","hu\u002F4.cli\u002F8.worker-generators",{"title":353,"path":354,"stem":355,"icon":356},"upgrade templates","\u002Fhu\u002Fcli\u002Fupgrade-templates","hu\u002F4.cli\u002F9.upgrade-templates","i-lucide-refresh-cw",{"title":358,"icon":227,"path":359,"stem":360,"children":361,"page":44},"errs","\u002Fhu\u002Ferrs","hu\u002F5.errs",[362,365,369],{"title":52,"path":363,"stem":364,"icon":227},"\u002Fhu\u002Ferrs\u002Foverview","hu\u002F5.errs\u002F1.overview",{"title":366,"path":367,"stem":368},"API","\u002Fhu\u002Ferrs\u002Fapi","hu\u002F5.errs\u002F2.api",{"title":370,"path":371,"stem":372,"icon":227},"Integráció","\u002Fhu\u002Ferrs\u002Fintegration","hu\u002F5.errs\u002F3.integration",{"title":374,"icon":231,"path":375,"stem":376,"children":377,"page":44},"envconf","\u002Fhu\u002Fenvconf","hu\u002F6.envconf",[378,381],{"title":52,"path":379,"stem":380,"icon":231},"\u002Fhu\u002Fenvconf\u002Foverview","hu\u002F6.envconf\u002F1.overview",{"title":382,"path":383,"stem":384},"Receptek","\u002Fhu\u002Fenvconf\u002Frecipes","hu\u002F6.envconf\u002F2.recipes",{"title":386,"icon":387,"path":388,"stem":389,"children":390,"page":44},"httperr","i-lucide-globe","\u002Fhu\u002Fhttperr","hu\u002F7.httperr",[391,394,399],{"title":52,"path":392,"stem":393,"icon":387},"\u002Fhu\u002Fhttperr\u002Foverview","hu\u002F7.httperr\u002F1.overview",{"title":395,"path":396,"stem":397,"icon":398},"Hibaválaszok","\u002Fhu\u002Fhttperr\u002Ferror-responses","hu\u002F7.httperr\u002F2.error-responses","i-lucide-octagon-alert",{"title":400,"path":401,"stem":402,"icon":403},"Validáció","\u002Fhu\u002Fhttperr\u002Fvalidation","hu\u002F7.httperr\u002F3.validation","i-lucide-badge-check",{"title":405,"icon":406,"path":407,"stem":408,"children":409,"page":44},"dbx","i-lucide-database","\u002Fhu\u002Fdbx","hu\u002F8.dbx",[410,413,417,421,426],{"title":52,"path":411,"stem":412,"icon":406},"\u002Fhu\u002Fdbx\u002Foverview","hu\u002F8.dbx\u002F1.overview",{"title":414,"path":415,"stem":416,"icon":106},"pgx","\u002Fhu\u002Fdbx\u002Fpg","hu\u002F8.dbx\u002F2.pg",{"title":418,"path":419,"stem":420,"icon":47},"bun","\u002Fhu\u002Fdbx\u002Fbunx","hu\u002F8.dbx\u002F3.bunx",{"title":422,"path":423,"stem":424,"icon":425},"Tranzakciók","\u002Fhu\u002Fdbx\u002Ftransactions","hu\u002F8.dbx\u002F4.transactions","i-lucide-git-merge",{"title":427,"path":428,"stem":429,"icon":318},"Seederek","\u002Fhu\u002Fdbx\u002Fseed","hu\u002F8.dbx\u002F5.seed",{"title":431,"icon":55,"path":432,"stem":433,"children":434,"page":44},"paginate","\u002Fhu\u002Fpaginate","hu\u002F9.paginate",[435,438],{"title":52,"path":436,"stem":437,"icon":55},"\u002Fhu\u002Fpaginate\u002Foverview","hu\u002F9.paginate\u002F1.overview",{"title":439,"path":440,"stem":441,"icon":19},"Cursor-lapozás","\u002Fhu\u002Fpaginate\u002Fcursor","hu\u002F9.paginate\u002F2.cursor",{"id":443,"title":143,"body":444,"description":1280,"extension":1281,"links":1282,"meta":1283,"navigation":1284,"path":144,"seo":1285,"stem":145,"__hash__":1286},"docs_hu\u002Fhu\u002F14.notify\u002F3.broadcast.md",{"type":445,"value":446,"toc":1269},"minimark",[447,455,484,489,520,531,610,614,661,690,694,732,768,772,900,917,945,964,968,1026,1070,1074,1124,1135,1139,1180,1206,1210,1235,1239,1265],[448,449,450,451,454],"p",{},"Ez az alcsomag adja a ",[452,453,130],"code",{}," élő push-csatornáját: importáld, amikor egy notificationnek azonnal, kapcsolódó kliensekhez kell eljutnia, a database-csatorna tartósságán túl vagy helyett.",[456,457,462],"pre",{"className":458,"code":459,"language":460,"meta":461,"style":461},"language-go shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import \"github.com\u002Fgp-system\u002Fnotify\u002Fbroadcast\"\n","go","",[452,463,464],{"__ignoreMap":461},[465,466,469,473,477,481],"span",{"class":467,"line":468},"line",1,[465,470,472],{"class":471},"s7zQu","import",[465,474,476],{"class":475},"sMK4o"," \"",[465,478,480],{"class":479},"sBMFI","github.com\u002Fgp-system\u002Fnotify\u002Fbroadcast",[465,482,483],{"class":475},"\"\n",[485,486,488],"h2",{"id":487},"broadcast","Broadcast",[448,490,491,492,495,496,505,506,509,510,515,516,519],{},"A ",[452,493,494],{},"notify\u002Fbroadcast"," egy notification élő push-oldala: egy vékony, Valkey-alapú publisher, ami a ",[497,498,502],"a",{"href":499,"rel":500},"https:\u002F\u002Fgithub.com\u002Fcentrifugal\u002Fcentrifuge",[501],"nofollow",[452,503,504],{},"centrifugal\u002Fcentrifuge","-re épül, a Centrifugo és a Grafana Live mögötti libraryre. Szándékosan kicsi: a publikálás fire-and-forget, a durability teljes egészében a ",[497,507,508],{"href":140},"database csatornában"," él, nem itt. A csomagot két szerep osztja meg: bármely process (jellemzően a worker) csak azért importálja, hogy publikáljon, míg a dedikált ",[497,511,512],{"href":269},[452,513,514],{},"realtime"," gateway is ezt használja a kapcsolatok tartására és a publikáltak relay-elésére; a gateway-oldalért lásd azt az oldalt (",[452,517,518],{},"cmd\u002Frealtime",", skálázás, kliens).",[448,521,522,523,526,527,530],{},"Egy notification egy harmadik tartalom-interfészen keresztül iratkozik fel erre a csatornára, a ",[452,524,525],{},"Mailable"," és a ",[452,528,529],{},"Databasable"," mellett:",[456,532,534],{"className":458,"code":533,"language":460,"meta":461,"style":461},"type Broadcastable interface {\n    ToBroadcast(ctx context.Context, r Recipient) (broadcast.Message, error)\n}\n",[452,535,536,550,604],{"__ignoreMap":461},[465,537,538,541,544,547],{"class":467,"line":468},[465,539,540],{"class":475},"type",[465,542,543],{"class":479}," Broadcastable",[465,545,546],{"class":475}," interface",[465,548,549],{"class":475}," {\n",[465,551,553,557,560,564,567,570,573,576,579,582,585,588,590,592,595,597,601],{"class":467,"line":552},2,[465,554,556],{"class":555},"s2Zo4","    ToBroadcast",[465,558,559],{"class":475},"(",[465,561,563],{"class":562},"sHdIc","ctx",[465,565,566],{"class":479}," context",[465,568,569],{"class":475},".",[465,571,572],{"class":479},"Context",[465,574,575],{"class":475},",",[465,577,578],{"class":562}," r",[465,580,581],{"class":479}," Recipient",[465,583,584],{"class":475},")",[465,586,587],{"class":475}," (",[465,589,487],{"class":479},[465,591,569],{"class":475},[465,593,594],{"class":479},"Message",[465,596,575],{"class":475},[465,598,600],{"class":599},"spNyl"," error",[465,602,603],{"class":475},")\n",[465,605,607],{"class":467,"line":606},3,[465,608,609],{"class":475},"}\n",[485,611,613],{"id":612},"valkeyconfig","ValkeyConfig",[456,615,617],{"className":458,"code":616,"language":460,"meta":461,"style":461},"type ValkeyConfig struct {\n    Addr     string\n    Password string\n    DB       int\n}\n",[452,618,619,631,640,647,656],{"__ignoreMap":461},[465,620,621,623,626,629],{"class":467,"line":468},[465,622,540],{"class":475},[465,624,625],{"class":479}," ValkeyConfig",[465,627,628],{"class":475}," struct",[465,630,549],{"class":475},[465,632,633,637],{"class":467,"line":552},[465,634,636],{"class":635},"sTEyZ","    Addr     ",[465,638,639],{"class":599},"string\n",[465,641,642,645],{"class":467,"line":606},[465,643,644],{"class":635},"    Password ",[465,646,639],{"class":599},[465,648,650,653],{"class":467,"line":649},4,[465,651,652],{"class":635},"    DB       ",[465,654,655],{"class":599},"int\n",[465,657,659],{"class":467,"line":658},5,[465,660,609],{"class":475},[448,662,491,663,665,666,670,671,673,674,678,679,682,683,686,687,689],{},[452,664,613],{}," szándékosan ",[667,668,669],"strong",{},"nem hordoz saját env-tageket",": a ",[452,672,494],{}," egy library, nem egy hely, ahol egy env-névteret birtokolna. A ",[497,675,676],{"href":269},[452,677,514],{}," chassis a saját ",[452,680,681],{},"VALKEY_*","-taggelt configjából épít egyet, és azt adja át (",[452,684,685],{},"realtime.Config.BroadcastValkey()","); egy nem-chassis publisher ugyanezt teszi, bármilyen configból, ami már megvan neki. A pontos mappelésért lásd a ",[497,688,268],{"href":269}," oldalt.",[485,691,693],{"id":692},"config","Config",[456,695,697],{"className":458,"code":696,"language":460,"meta":461,"style":461},"type Config struct {\n    ChannelPrefix string `env:\"CHANNEL_PREFIX\" envDefault:\"rt\"`\n}\n",[452,698,699,710,728],{"__ignoreMap":461},[465,700,701,703,706,708],{"class":467,"line":468},[465,702,540],{"class":475},[465,704,705],{"class":479}," Config",[465,707,628],{"class":475},[465,709,549],{"class":475},[465,711,712,715,718,721,725],{"class":467,"line":552},[465,713,714],{"class":635},"    ChannelPrefix ",[465,716,717],{"class":599},"string",[465,719,720],{"class":475}," `",[465,722,724],{"class":723},"sfazB","env:\"CHANNEL_PREFIX\" envDefault:\"rt\"",[465,726,727],{"class":475},"`\n",[465,729,730],{"class":467,"line":606},[465,731,609],{"class":475},[448,733,491,734,736,737,739,740,743,744,747,748,751,752,755,756,759,760,763,764,767],{},[452,735,613],{},"-gal ellentétben a ",[452,738,693],{}," ",[667,741,742],{},"igen"," hordoz saját env-taget (",[452,745,746],{},"CHANNEL_PREFIX","). A kit a saját ",[452,749,750],{},"REALTIME_"," prefixe alá ágyazza, így egy generált projektben ",[452,753,754],{},"REALTIME_CHANNEL_PREFIX","-ként jelenik meg; lásd a ",[497,757,268],{"href":758},"\u002Fhu\u002Fkit\u002Frealtime#config"," oldalt és a ",[497,761,762],{"href":205},"konfiguráció-referenciát"," a teljes változólistáért. A ",[452,765,766],{},"ChannelPrefix"," névterezi minden Valkey-csatornát, amihez ez a csomag hozzáér, így több projekt (vagy több környezet) megoszthat egy Valkey-instance-t ütközés nélkül.",[485,769,771],{"id":770},"publikálás","Publikálás",[456,773,775],{"className":458,"code":774,"language":460,"meta":461,"style":461},"pub, err := broadcast.NewPublisher(ctx, valkeyCfg, cfg)\npub := broadcast.MustNewPublisher(ctx, valkeyCfg, cfg) \u002F\u002F panicol hiba esetén; a szokásos main()-konstruktor\n\nerr := pub.Publish(ctx, channel, msg)\nerr = pub.Close()\n",[452,776,777,814,846,852,883],{"__ignoreMap":461},[465,778,779,782,784,787,790,793,795,798,800,802,804,807,809,812],{"class":467,"line":468},[465,780,781],{"class":635},"pub",[465,783,575],{"class":475},[465,785,786],{"class":635}," err ",[465,788,789],{"class":475},":=",[465,791,792],{"class":635}," broadcast",[465,794,569],{"class":475},[465,796,797],{"class":555},"NewPublisher",[465,799,559],{"class":475},[465,801,563],{"class":635},[465,803,575],{"class":475},[465,805,806],{"class":635}," valkeyCfg",[465,808,575],{"class":475},[465,810,811],{"class":635}," cfg",[465,813,603],{"class":475},[465,815,816,819,821,823,825,828,830,832,834,836,838,840,842],{"class":467,"line":552},[465,817,818],{"class":635},"pub ",[465,820,789],{"class":475},[465,822,792],{"class":635},[465,824,569],{"class":475},[465,826,827],{"class":555},"MustNewPublisher",[465,829,559],{"class":475},[465,831,563],{"class":635},[465,833,575],{"class":475},[465,835,806],{"class":635},[465,837,575],{"class":475},[465,839,811],{"class":635},[465,841,584],{"class":475},[465,843,845],{"class":844},"sHwdD"," \u002F\u002F panicol hiba esetén; a szokásos main()-konstruktor\n",[465,847,848],{"class":467,"line":606},[465,849,851],{"emptyLinePlaceholder":850},true,"\n",[465,853,854,857,859,862,864,867,869,871,873,876,878,881],{"class":467,"line":649},[465,855,856],{"class":635},"err ",[465,858,789],{"class":475},[465,860,861],{"class":635}," pub",[465,863,569],{"class":475},[465,865,866],{"class":555},"Publish",[465,868,559],{"class":475},[465,870,563],{"class":635},[465,872,575],{"class":475},[465,874,875],{"class":635}," channel",[465,877,575],{"class":475},[465,879,880],{"class":635}," msg",[465,882,603],{"class":475},[465,884,885,887,890,892,894,897],{"class":467,"line":658},[465,886,856],{"class":635},[465,888,889],{"class":475},"=",[465,891,861],{"class":635},[465,893,569],{"class":475},[465,895,896],{"class":555},"Close",[465,898,899],{"class":475},"()\n",[448,901,491,902,905,906,909,910,912,913,916],{},[452,903,904],{},"Publisher"," egy publish-only ",[452,907,908],{},"centrifuge.Node",", ami osztozik a projekt Valkey brokerén; sosem fogad kapcsolatot, így egy csak publikáló process (egy worker, egy egyszeri script) semmi mástól nem függ, csak egy Valkey felé menő hálózati klienstől. A ",[452,911,866],{}," fire-and-forget: egy sikertelen publish visszaadódik a hívónak, nincs újrapróbálva és nincs queue-zva, ezért a durability-történet a ",[497,914,915],{"href":140},"database csatorna",", nem ez.",[456,918,920],{"className":458,"code":919,"language":460,"meta":461,"style":461},"notify.NewBroadcastChannel(pub, cfg.ChannelPrefix)\n",[452,921,922],{"__ignoreMap":461},[465,923,924,926,928,931,933,935,937,939,941,943],{"class":467,"line":468},[465,925,130],{"class":635},[465,927,569],{"class":475},[465,929,930],{"class":555},"NewBroadcastChannel",[465,932,559],{"class":475},[465,934,781],{"class":635},[465,936,575],{"class":475},[465,938,811],{"class":635},[465,940,569],{"class":475},[465,942,766],{"class":635},[465,944,603],{"class":475},[448,946,947,948,950,951,954,955,959,960,963],{},"egy ",[452,949,904],{},"-t csomagol egy ",[452,952,953],{},"notify.Channel","-lé, amihez a ",[497,956,958],{"href":957},"\u002Fhu\u002Fnotify\u002Foverview#a-hub","Hub"," a ",[452,961,962],{},"Broadcastable"," tartalmat dispatcholja.",[485,965,967],{"id":966},"csatorna-elnevezés-userchannel-és-topicchannel","Csatorna-elnevezés: UserChannel és TopicChannel",[456,969,971],{"className":458,"code":970,"language":460,"meta":461,"style":461},"func UserChannel(prefix, subject string) string  \u002F\u002F egy recipiens saját csatornája\nfunc TopicChannel(prefix, topic string) string    \u002F\u002F megosztott, opt-in topic-csatorna\n",[452,972,973,1001],{"__ignoreMap":461},[465,974,975,978,981,983,986,988,991,994,996,998],{"class":467,"line":468},[465,976,977],{"class":475},"func",[465,979,980],{"class":555}," UserChannel",[465,982,559],{"class":475},[465,984,985],{"class":562},"prefix",[465,987,575],{"class":475},[465,989,990],{"class":562}," subject",[465,992,993],{"class":599}," string",[465,995,584],{"class":475},[465,997,993],{"class":599},[465,999,1000],{"class":844},"  \u002F\u002F egy recipiens saját csatornája\n",[465,1002,1003,1005,1008,1010,1012,1014,1017,1019,1021,1023],{"class":467,"line":552},[465,1004,977],{"class":475},[465,1006,1007],{"class":555}," TopicChannel",[465,1009,559],{"class":475},[465,1011,985],{"class":562},[465,1013,575],{"class":475},[465,1015,1016],{"class":562}," topic",[465,1018,993],{"class":599},[465,1020,584],{"class":475},[465,1022,993],{"class":599},[465,1024,1025],{"class":844},"    \u002F\u002F megosztott, opt-in topic-csatorna\n",[448,1027,1028,1029,1032,1033,1036,1037,1040,1041,1044,1045,1048,1049,1048,1052,1055,1056,1060,1061,739,1066,1069],{},"Minden kapcsolatot, amit a ",[497,1030,1031],{"href":269},"realtime gateway"," elfogad, server-side feliratkoztat a saját ",[452,1034,1035],{},"UserChannel","-jára, ami azt jelenti, hogy egy ",[452,1038,1039],{},"Recipient.ID","-nak címzett notification kliens-oldali subscribe hívás nélkül eljut pontosan annak a usernek az élő kapcsolatáig. A ",[452,1042,1043],{},"TopicChannel"," a megosztott csatornákat nevezi meg, amiket a broadcast az egy-recipienses notificationökön túl használ (announcementek, admin-riasztások); az ehhez szükséges ",[452,1046,1047],{},"TopicAuth","\u002F",[452,1050,1051],{},"Allow",[452,1053,1054],{},"AllowPrefix"," authorizációért lásd a ",[497,1057,1059],{"href":1058},"\u002Fhu\u002Fkit\u002Frealtime#a-gateway","Realtime: megosztott topic-csatornák"," szakaszt, ami az ",[497,1062,1063],{"href":94},[452,1064,1065],{},"auth\u002Frbac",[452,1067,1068],{},"Identity","-jére támaszkodik.",[485,1071,1073],{"id":1072},"newnode","NewNode",[456,1075,1077],{"className":458,"code":1076,"language":460,"meta":461,"style":461},"func NewNode(cfg ValkeyConfig, centrifugeCfg centrifuge.Config) (*centrifuge.Node, error)\n",[452,1078,1079],{"__ignoreMap":461},[465,1080,1081,1083,1086,1088,1091,1093,1095,1098,1101,1103,1105,1107,1110,1113,1115,1118,1120,1122],{"class":467,"line":468},[465,1082,977],{"class":475},[465,1084,1085],{"class":555}," NewNode",[465,1087,559],{"class":475},[465,1089,1090],{"class":562},"cfg",[465,1092,625],{"class":479},[465,1094,575],{"class":475},[465,1096,1097],{"class":562}," centrifugeCfg",[465,1099,1100],{"class":479}," centrifuge",[465,1102,569],{"class":475},[465,1104,693],{"class":479},[465,1106,584],{"class":475},[465,1108,1109],{"class":475}," (*",[465,1111,1112],{"class":479},"centrifuge",[465,1114,569],{"class":475},[465,1116,1117],{"class":479},"Node",[465,1119,575],{"class":475},[465,1121,600],{"class":599},[465,1123,603],{"class":475},[448,1125,491,1126,1128,1129,1131,1132,1134],{},[452,1127,1073],{}," a két szerep közös konstruktora: egy publish-only node (amit a ",[452,1130,797],{}," csomagol) és a teljes, kapcsolatokat fogadó node, amit a ",[497,1133,1031],{"href":269}," futtat. Bedrótozza a Valkey brokert, amire a centrifuge-nak szüksége van ahhoz, hogy egy publish minden gateway-példányhoz eljusson, függetlenül attól, melyik process publikálta.",[485,1136,1138],{"id":1137},"memory","Memory",[456,1140,1142],{"className":458,"code":1141,"language":460,"meta":461,"style":461},"mem := broadcast.NewMemory()\npub := mem.All() \u002F\u002F []broadcast.Published, minden eddig rögzített\n",[452,1143,1144,1160],{"__ignoreMap":461},[465,1145,1146,1149,1151,1153,1155,1158],{"class":467,"line":468},[465,1147,1148],{"class":635},"mem ",[465,1150,789],{"class":475},[465,1152,792],{"class":635},[465,1154,569],{"class":475},[465,1156,1157],{"class":555},"NewMemory",[465,1159,899],{"class":475},[465,1161,1162,1164,1166,1169,1171,1174,1177],{"class":467,"line":552},[465,1163,818],{"class":635},[465,1165,789],{"class":475},[465,1167,1168],{"class":635}," mem",[465,1170,569],{"class":475},[465,1172,1173],{"class":555},"All",[465,1175,1176],{"class":475},"()",[465,1178,1179],{"class":844}," \u002F\u002F []broadcast.Published, minden eddig rögzített\n",[448,1181,491,1182,1184,1185,1188,1189,1192,1193,526,1199,1205],{},[452,1183,1138],{}," egy test double: minden publikálást rögzít Valkey érintése helyett, így egy notification ",[452,1186,1187],{},"ToBroadcast","-ja (vagy egy ",[452,1190,1191],{},"notify.NewBroadcastChannel(mem, prefix)","-szel bekötött csatorna) közvetlenül assertálható, ugyanúgy, ahogy a ",[497,1194,1196],{"href":1195},"\u002Fhu\u002Fmail\u002Foverview#dev-mailerek-memory-log-%C3%A9s-discard",[452,1197,1198],{},"mail.NewMemory()",[497,1200,1202],{"href":1201},"\u002Fhu\u002Fnotify\u002Fdatabase#memorystore",[452,1203,1204],{},"notifydatabase.NewMemoryStore()"," is a valódi driverét helyettesíti.",[485,1207,1209],{"id":1208},"a-kittel","A kittel",[448,1211,1212,1213,1215,1216,1218,1219,739,1223,1225,1226,1229,1230,1234],{},"A gateway, ami egy ",[452,1214,866],{}," hívást élő kliens-push-sá alakít, a skálázási modellje és a kliens-oldali feliratkozási történet mind a ",[497,1217,268],{"href":269}," oldalon van. A megosztott topic-csatornák authorizációs modellje az ",[497,1220,1221],{"href":94},[452,1222,1065],{},[452,1224,1068],{},"-jére épül. A broadcast-csatorna egy notification ",[452,1227,1228],{},"Via","-jába drótozását az ",[497,1231,1232],{"href":306},[452,1233,305],{}," tárgyalja.",[485,1236,1238],{"id":1237},"kapcsolódó-oldalak","Kapcsolódó oldalak",[1240,1241,1242,1254,1260],"ul",{},[1243,1244,1245,670,1247,1249,1250,1253],"li",{},[497,1246,52],{"href":136},[452,1248,958],{},", a ",[452,1251,1252],{},"Notification"," és a mail-csatorna.",[1243,1255,1256,1259],{},[497,1257,1258],{"href":140},"Database",": a durable csatorna, amit ez kiegészít, sosem helyettesít.",[1243,1261,1262,1264],{},[497,1263,268],{"href":269},": a gateway, a skálázási modellje és a kliens.",[1266,1267,1268],"style",{},"html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}",{"title":461,"searchDepth":552,"depth":552,"links":1270},[1271,1272,1273,1274,1275,1276,1277,1278,1279],{"id":487,"depth":552,"text":488},{"id":612,"depth":552,"text":613},{"id":692,"depth":552,"text":693},{"id":770,"depth":552,"text":771},{"id":966,"depth":552,"text":967},{"id":1072,"depth":552,"text":1073},{"id":1137,"depth":552,"text":1138},{"id":1208,"depth":552,"text":1209},{"id":1237,"depth":552,"text":1238},"A realtime broadcast notification csatorna.","md",null,{},{"icon":131},{"title":143,"description":1280},"3mtmWi4K8tNyIrmwtZV8w8gcj9-x76WhZw6tFbJL3FM",[1288,1290],{"title":139,"path":140,"stem":141,"description":1289,"icon":131,"children":-1},"A tartós database notification csatorna.",{"title":52,"path":153,"stem":154,"description":1291,"icon":148,"children":-1},"Object storage egy Driver\u002FDisk\u002FManager modell mögött, memória-, helyi lemez- és S3-kompatibilis driverekkel.",1785445896605]