[{"data":1,"prerenderedAt":1167},["ShallowReactive",2],{"navigation_docs_hu":3,"-hu-cli-add-realtime":442,"-hu-cli-add-realtime-surround":1162},[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":310,"body":444,"description":1155,"extension":1156,"links":1157,"meta":1158,"navigation":1159,"path":311,"seo":1160,"stem":312,"__hash__":1161},"docs_hu\u002Fhu\u002F4.cli\u002F14.add-realtime.md",{"type":445,"value":446,"toc":1149},"minimark",[447,451,483,500,513,518,756,772,806,810,840,973,1024,1027,1055,1059,1081,1085,1114,1145],[448,449,450],"p",{},"Ezt a generátort akkor éri meg elővenni, amikor a projektnek élő frissítéseket kell küldenie a csatlakozott kliensekhez: egy értesítés-badge, egy élő rendelésállapot, egy chatüzenet.",[452,453,458],"pre",{"className":454,"code":455,"language":456,"meta":457,"style":457},"language-sh shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","go tool gpsystem add realtime\n","sh","",[459,460,461],"code",{"__ignoreMap":457},[462,463,466,470,474,477,480],"span",{"class":464,"line":465},"line",1,[462,467,469],{"class":468},"sBMFI","go",[462,471,473],{"class":472},"sfazB"," tool",[462,475,476],{"class":472}," gpsystem",[462,478,479],{"class":472}," add",[462,481,482],{"class":472}," realtime\n",[448,484,485,486,489,490,496,497,499],{},"Hozzáadja a ",[459,487,488],{},"cmd\u002Frealtime","-ot: egy dedikált szervert, ami a kliens streaming-kapcsolatokat tartja (WebSocket, HTTP-streaming\u002FSSE fallbackkel), és a bármely processből a ",[491,492,493],"a",{"href":269},[459,494,495],{},"notify\u002Fbroadcast","-on keresztül publikált üzeneteket kézbesíti. Nem hordoz üzleti függőséget, ezért szabadon, az API\u002Fworker processektől függetlenül skálázódik; lásd a ",[491,498,268],{"href":269}," oldalt az architektúráért és a skálázási történetért.",[448,501,502,503,505,506,512],{},"Explicit, opt-in parancs, nem ",[459,504,320],{}," default: mint az ",[491,507,509],{"href":508},"\u002Fhu\u002Fcli\u002Fworker-generators#add-worker",[459,510,511],{},"add worker","-t, akkor futtatod, amikor a projektnek ténylegesen szüksége van a gatewayre, és egy Traefik-exponált service-et ad hozzá.",[514,515,517],"h2",{"id":516},"mit-generál","Mit generál",[452,519,523],{"className":520,"code":521,"filename":522,"language":469,"meta":457,"style":457},"language-go shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","func main() {\n    cfg := envconf.MustLoad[config.Config]()\n    ctx := context.Background()\n\n    err := realtime.Run(ctx, cfg.Realtime, func(topics *realtime.TopicAuth) error {\n        \u002F\u002F Itt authorizáld a megosztott topic-csatornákat, pl.:\n        \u002F\u002F topics.Allow(\"announcements\", func(id *rbac.Identity) bool { return true })\n        \u002F\u002F gpsystem:topics\n        return nil\n    },\n        \u002F\u002F gpsystem:closers\n    )\n    if err != nil {\n        log.Fatal(err)\n    }\n}\n","cmd\u002Frealtime\u002Fmain.go",[459,524,525,541,574,593,600,661,668,674,680,690,696,702,708,725,744,750],{"__ignoreMap":457},[462,526,527,531,535,538],{"class":464,"line":465},[462,528,530],{"class":529},"sMK4o","func",[462,532,534],{"class":533},"s2Zo4"," main",[462,536,537],{"class":529},"()",[462,539,540],{"class":529}," {\n",[462,542,544,548,551,554,557,560,563,566,568,571],{"class":464,"line":543},2,[462,545,547],{"class":546},"sTEyZ","    cfg ",[462,549,550],{"class":529},":=",[462,552,553],{"class":546}," envconf",[462,555,556],{"class":529},".",[462,558,559],{"class":533},"MustLoad",[462,561,562],{"class":529},"[",[462,564,565],{"class":468},"config",[462,567,556],{"class":529},[462,569,570],{"class":468},"Config",[462,572,573],{"class":529},"]()\n",[462,575,577,580,582,585,587,590],{"class":464,"line":576},3,[462,578,579],{"class":546},"    ctx ",[462,581,550],{"class":529},[462,583,584],{"class":546}," context",[462,586,556],{"class":529},[462,588,589],{"class":533},"Background",[462,591,592],{"class":529},"()\n",[462,594,596],{"class":464,"line":595},4,[462,597,599],{"emptyLinePlaceholder":598},true,"\n",[462,601,603,606,608,611,613,616,619,622,625,628,630,632,634,637,641,644,647,649,652,655,659],{"class":464,"line":602},5,[462,604,605],{"class":546},"    err ",[462,607,550],{"class":529},[462,609,610],{"class":546}," realtime",[462,612,556],{"class":529},[462,614,615],{"class":533},"Run",[462,617,618],{"class":529},"(",[462,620,621],{"class":546},"ctx",[462,623,624],{"class":529},",",[462,626,627],{"class":546}," cfg",[462,629,556],{"class":529},[462,631,268],{"class":546},[462,633,624],{"class":529},[462,635,636],{"class":529}," func(",[462,638,640],{"class":639},"sHdIc","topics",[462,642,643],{"class":529}," *",[462,645,646],{"class":468},"realtime",[462,648,556],{"class":529},[462,650,651],{"class":468},"TopicAuth",[462,653,654],{"class":529},")",[462,656,658],{"class":657},"spNyl"," error",[462,660,540],{"class":529},[462,662,664],{"class":464,"line":663},6,[462,665,667],{"class":666},"sHwdD","        \u002F\u002F Itt authorizáld a megosztott topic-csatornákat, pl.:\n",[462,669,671],{"class":464,"line":670},7,[462,672,673],{"class":666},"        \u002F\u002F topics.Allow(\"announcements\", func(id *rbac.Identity) bool { return true })\n",[462,675,677],{"class":464,"line":676},8,[462,678,679],{"class":666},"        \u002F\u002F gpsystem:topics\n",[462,681,683,687],{"class":464,"line":682},9,[462,684,686],{"class":685},"s7zQu","        return",[462,688,689],{"class":529}," nil\n",[462,691,693],{"class":464,"line":692},10,[462,694,695],{"class":529},"    },\n",[462,697,699],{"class":464,"line":698},11,[462,700,701],{"class":666},"        \u002F\u002F gpsystem:closers\n",[462,703,705],{"class":464,"line":704},12,[462,706,707],{"class":529},"    )\n",[462,709,711,714,717,720,723],{"class":464,"line":710},13,[462,712,713],{"class":685},"    if",[462,715,716],{"class":546}," err ",[462,718,719],{"class":529},"!=",[462,721,722],{"class":529}," nil",[462,724,540],{"class":529},[462,726,728,731,733,736,738,741],{"class":464,"line":727},14,[462,729,730],{"class":546},"        log",[462,732,556],{"class":529},[462,734,735],{"class":533},"Fatal",[462,737,618],{"class":529},[462,739,740],{"class":546},"err",[462,742,743],{"class":529},")\n",[462,745,747],{"class":464,"line":746},15,[462,748,749],{"class":529},"    }\n",[462,751,753],{"class":464,"line":752},16,[462,754,755],{"class":529},"}\n",[452,757,760],{"className":520,"code":758,"filename":759,"language":469,"meta":457,"style":457},"Realtime realtime.Config\n","internal\u002Fplatform\u002Fconfig\u002Fconfig.go",[459,761,762],{"__ignoreMap":457},[462,763,764,767,769],{"class":464,"line":465},[462,765,766],{"class":546},"Realtime realtime",[462,768,556],{"class":529},[462,770,771],{"class":546},"Config\n",[448,773,774,775,778,779,782,783,788,789,782,792,797,798,801,802,805],{},"A ",[459,776,777],{},"realtime.Config"," újrahasznosítja a ",[459,780,781],{},"VALKEY_*","-ot (",[491,784,785],{"href":205},[459,786,787],{},"queue.Config",") és a ",[459,790,791],{},"JWT_*",[491,793,794],{"href":205},[459,795,796],{},"auth.Config","); nincs új secret, amit kezelni kell. Lásd a ",[491,799,268],{"href":800},"\u002Fhu\u002Fkit\u002Frealtime#config"," oldalt a teljes ",[459,803,804],{},"REALTIME_*"," táblázatért.",[514,807,809],{"id":808},"composeyml-és-envexample","compose.yml és .env.example",[448,811,812,813,815,816,819,820,823,824,827,828,831,832,835,836,839],{},"Hozzáad egy ",[459,814,646],{}," service-t (path-alapon routolva a ",[459,817,818],{},"\u002Frealtime"," alatt a projekt meglévő ",[459,821,822],{},"APP_HOST","-ján, tehát nincs új DNS-bejegyzés vagy CORS-eset): nincs ",[459,825,826],{},"container_name"," (így a ",[459,829,830],{},"--scale"," működik), egy Traefik health-check label a ",[459,833,834],{},"\u002Frealtime\u002Fhealthz","-re mutatva (így egy draining példány kiesik a load-balancer poolból), ",[459,837,838],{},"responseForwarding.flushInterval=-1"," (így a streamelt bájtok azonnal flush-ölnek a proxyn át).",[452,841,846],{"className":842,"code":843,"filename":844,"language":845,"meta":457,"style":457},"language-yaml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","realtime:\n  build: { context: ., dockerfile: Dockerfile, target: development, args: { CMD: realtime } }\n  depends_on:\n    valkey:\n      condition: service_started\n  stop_grace_period: 30s\n  labels:\n    - traefik.http.routers.shopRealtime.rule=Host(`${APP_HOST}`) && PathPrefix(`\u002Frealtime`)\n    - traefik.http.services.shopRealtime.loadbalancer.healthCheck.path=\u002Frealtime\u002Fhealthz\n","compose.yml","yaml",[459,847,848,856,917,924,931,941,951,958,966],{"__ignoreMap":457},[462,849,850,853],{"class":464,"line":465},[462,851,646],{"class":852},"swJcz",[462,854,855],{"class":529},":\n",[462,857,858,861,864,867,869,871,875,877,880,882,885,887,890,892,895,897,900,902,904,907,909,911,914],{"class":464,"line":543},[462,859,860],{"class":852},"  build",[462,862,863],{"class":529},":",[462,865,866],{"class":529}," {",[462,868,584],{"class":852},[462,870,863],{"class":529},[462,872,874],{"class":873},"sbssI"," .",[462,876,624],{"class":529},[462,878,879],{"class":852}," dockerfile",[462,881,863],{"class":529},[462,883,884],{"class":472}," Dockerfile",[462,886,624],{"class":529},[462,888,889],{"class":852}," target",[462,891,863],{"class":529},[462,893,894],{"class":472}," development",[462,896,624],{"class":529},[462,898,899],{"class":852}," args",[462,901,863],{"class":529},[462,903,866],{"class":529},[462,905,906],{"class":852}," CMD",[462,908,863],{"class":529},[462,910,610],{"class":472},[462,912,913],{"class":529}," }",[462,915,916],{"class":529}," }\n",[462,918,919,922],{"class":464,"line":576},[462,920,921],{"class":852},"  depends_on",[462,923,855],{"class":529},[462,925,926,929],{"class":464,"line":595},[462,927,928],{"class":852},"    valkey",[462,930,855],{"class":529},[462,932,933,936,938],{"class":464,"line":602},[462,934,935],{"class":852},"      condition",[462,937,863],{"class":529},[462,939,940],{"class":472}," service_started\n",[462,942,943,946,948],{"class":464,"line":663},[462,944,945],{"class":852},"  stop_grace_period",[462,947,863],{"class":529},[462,949,950],{"class":472}," 30s\n",[462,952,953,956],{"class":464,"line":670},[462,954,955],{"class":852},"  labels",[462,957,855],{"class":529},[462,959,960,963],{"class":464,"line":676},[462,961,962],{"class":529},"    -",[462,964,965],{"class":472}," traefik.http.routers.shopRealtime.rule=Host(`${APP_HOST}`) && PathPrefix(`\u002Frealtime`)\n",[462,967,968,970],{"class":464,"line":682},[462,969,962],{"class":529},[462,971,972],{"class":472}," traefik.http.services.shopRealtime.loadbalancer.healthCheck.path=\u002Frealtime\u002Fhealthz\n",[452,974,977],{"className":454,"code":975,"filename":976,"language":456,"meta":457,"style":457},"REALTIME_LISTEN_ADDR=:3000\nREALTIME_DRAIN_TIMEOUT=20s\nREALTIME_CHANNEL_PREFIX=\u003Cprojekt>\nREALTIME_MAX_CONNECTIONS=0\n",".env.example",[459,978,979,990,1000,1014],{"__ignoreMap":457},[462,980,981,984,987],{"class":464,"line":465},[462,982,983],{"class":546},"REALTIME_LISTEN_ADDR",[462,985,986],{"class":529},"=",[462,988,989],{"class":472},":3000\n",[462,991,992,995,997],{"class":464,"line":543},[462,993,994],{"class":546},"REALTIME_DRAIN_TIMEOUT",[462,996,986],{"class":529},[462,998,999],{"class":472},"20s\n",[462,1001,1002,1005,1008,1011],{"class":464,"line":576},[462,1003,1004],{"class":546},"REALTIME_CHANNEL_PREFIX",[462,1006,1007],{"class":529},"=\u003C",[462,1009,1010],{"class":472},"projekt",[462,1012,1013],{"class":529},">\n",[462,1015,1016,1019,1021],{"class":464,"line":595},[462,1017,1018],{"class":546},"REALTIME_MAX_CONNECTIONS",[462,1020,986],{"class":529},[462,1022,1023],{"class":472},"0\n",[448,1025,1026],{},"Skálázd minden más service-től függetlenül:",[452,1028,1030],{"className":454,"code":1029,"language":456,"meta":457,"style":457},"docker compose up -d --scale realtime=3\n",[459,1031,1032],{"__ignoreMap":457},[462,1033,1034,1037,1040,1043,1046,1049,1052],{"class":464,"line":465},[462,1035,1036],{"class":468},"docker",[462,1038,1039],{"class":472}," compose",[462,1041,1042],{"class":472}," up",[462,1044,1045],{"class":472}," -d",[462,1047,1048],{"class":472}," --scale",[462,1050,1051],{"class":472}," realtime=",[462,1053,1054],{"class":873},"3\n",[514,1056,1058],{"id":1057},"megosztott-topicok-authorizálása","Megosztott topicok authorizálása",[448,1060,1061,1062,1065,1066,1068,1069,1072,1073,1076,1077,1080],{},"Minden kapcsolat automatikusan server-side feliratkozik a saját ",[459,1063,1064],{},"user:\u003Csubject>"," csatornájára; ehhez nem kell kód. A megosztott topicok opt-in: regisztrálj egy callbacket a ",[459,1067,522],{},"-ban a ",[459,1070,1071],{},"\u002F\u002F gpsystem:topics"," anchornál, és egy kliens név szerint iratkozhat fel rá. Egy topic, aminek nincs regisztrált ",[459,1074,1075],{},"Allow","-ja, sosem iratkoztatható fel; lásd a ",[491,1078,268],{"href":1079},"\u002Fhu\u002Fkit\u002Frealtime#a-gateway"," oldalt.",[514,1082,1084],{"id":1083},"egy-notification-bekötése","Egy notification bekötése",[448,1086,1087,1088,1090,1091,1095,1096,1099,1100,1103,1104,1107,1108,1113],{},"Az ",[459,1089,310],{}," csak magát a gatewayt drótozza be. Futtasd az első ",[491,1092,1093],{"href":306},[459,1094,305],{}," előtt, hogy a broadcast csatorna automatikusan bedrótozódjon a közös ",[459,1097,1098],{},"notify.Sender","-be; ha már léteznek notificationök, add hozzá kézzel a ",[459,1101,1102],{},"notify.ChannelBroadcast","-ot a ",[459,1105,1106],{},"Via","-jukhoz és a broadcast-konstrukciót (lásd az ",[491,1109,1111],{"href":1110},"\u002Fhu\u002Fcli\u002Fadd-notification#mit-gener%C3%A1l",[459,1112,305],{}," jegyzetét).",[448,1115,1087,1116,1118,1119,1122,1123,1126,1127,1122,1130,1133,1134,1122,1136,1138,1139,1144],{},[459,1117,310],{}," a ",[459,1120,1121],{},"gpsystem:imports","\u002F",[459,1124,1125],{},"gpsystem:config"," anchoroknál ír a platform configban, és a ",[459,1128,1129],{},"gpsystem:services",[459,1131,1132],{},"gpsystem:env"," anchoroknál a ",[459,1135,844],{},[459,1137,976],{},"-ben. Ha valamelyik anchor-komment hiányzik, a parancs megáll, és kiírja a beillesztendő blokkot, ugyanúgy, ahogy az ",[491,1140,1142],{"href":1141},"\u002Fhu\u002Fcli\u002Fadd-mail#anchor-kommentek",[459,1143,300],{}," is teszi.",[1146,1147,1148],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}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 .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}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 .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}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 .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":457,"searchDepth":543,"depth":543,"links":1150},[1151,1152,1153,1154],{"id":516,"depth":543,"text":517},{"id":808,"depth":543,"text":809},{"id":1057,"depth":543,"text":1058},{"id":1083,"depth":543,"text":1084},"A realtime notification-gateway scaffoldolása: egy dedikált, horizontálisan skálázható cmd\u002Frealtime binary.","md",null,{},{"icon":313},{"title":310,"description":1155},"LdA29w57msyHDVFaOA_FT2PR2ujYOv35G_x2uf8rWhM",[1163,1165],{"title":305,"path":306,"stem":307,"description":1164,"icon":308,"children":-1},"Modul-tulajdonú, többcsatornás notification generálása: payload, Via, csatornánkénti tartalom, és a közös Hub bekötése.",{"title":315,"path":316,"stem":317,"description":1166,"icon":318,"children":-1},"Seeder hozzáadása a projekt központi seeds\u002F package-éhez, automatikus regisztrációval.",1785445898386]