Example
Kill Feed
Touches every layer | typed params, compression, server push, broadcast, wildcard routes, and middleware.
Server
local app = RoExpress("App")
local broadcast = RoExpress("Broadcast")
local bridge = RoExpress("Bridge")
local killFeed = {}
app:Use("logger", function(Player, Payload)
print(Player.Name, Payload.method, Payload.route)
end)
app:Post("stats/save", function(Player, Payload, req, res)
local entry = { killer=req.data.killerName, victim=req.data.victimName, weapon=req.data.weapon, timestamp=os.time() }
table.insert(killFeed, 1, entry)
app:PushAll("killFeed.entry", entry) -- reliable
broadcast:EmitAll("killFeed.ping", { killer=req.data.killerName, victim=req.data.victimName }) -- unreliable
bridge.Fire("kill.registered", entry) -- internal bus
res:Send({ success = true })
end)
app:Get("stats/:userId=number", function(Player, Payload, req, res)
res:Send(stats[req.params.userId]) -- userId already a number
end)
app:Get("feed/all", handler, { compress = true })
app:Get("feed/recent", handler) -- ?limit=20
app:Get("feed/*/kills", handler) -- req.captures[1] = period
Client
listener:On("killFeed.entry", function(data) FeedUI:Add(data) end)
listener:On("killFeed.ping", function(data) HUD:Flash(data) end)
network:Get("feed/all", nil, function(res) FeedUI:Load(res.data.entries) end)
Modules used
| Module | Feature demonstrated |
|---|---|
| App | Routing, middleware, server push, wildcard routes, compression |
| Broadcast | Unreliable fire-and-forget |
| Bridge | Internal server bus decoupling |
| Network | Client-side fetch |
| Listener | Subscribing to push and broadcast |
See also
Server Push · Broadcast · Router | wildcard routes · Codec | compression · Round Manager | similar push pattern