►
From YouTube: Scalable Multiplayer Game Design with OpenShift (E3)
Description
This monthly series explores what it takes to design a scale-out multiplayer video game architecture using containers and OpenShift. There will be live coding, philosophical design discussion, and everything in between.
Today's session will look into the game server running on OpenShift, accessing the server via AMQP, hacking on a front end, deeper exploration of Red Hat Data Grid, and more.
A
Hello
and
welcome
this
is
another
episode
of
the
scalable
multiplayer
game
design
live
stream.
I'm
your
host
eric
jacobs
joining
me
today
are
roddy
keely,
kiley
and
derek
reese,
both
from
red
hat.
I
don't
know
why.
A
A
D
A
I'm
gonna
I'm
gonna,
blame
the
tool
and
say
that
they
they
change
where
the
buttons
are,
but
anyway,
so
welcome
back.
I'm
very
flustered,
as
you
can
probably
tell
just
because
it's
20
20
and
I'm
pretty
sure
everybody's.
That's.
A
Who's
been
sort
of
keeping
track
of
what
what
we're
doing
right.
You
know
we're
trying
to
build
this
scalable
multiplayer
game
with
openshift,
and
we
have
started
with
a
number
of
different
technologies,
we're
using
single
sign-on
as
kind
of
a
bridge
layer
to
github
authentication.
A
We
could
be
using
internal
stuff
inside
that
red
hat
single
sign-on,
which
is
where
is
that
it's
this
guy
key
cloak
here.
But
you
know
we
just
decided
to
use
github
because
it's
easy
we've
got
the.
I
don't
have
the
lobby
deployed,
because
I
was
running
that
locally
and
I
can't
remember
last
time
we
did
do
a
little
bit
with
amq
and
the
chat
right.
I
think
that
was
with
the
last
stream
was.
I.
E
A
A
It
doesn't
doesn't
use
ruby
and
sinatra
as
the
chat
back
end,
but
one
of
the
things
that
we
were
going
to
try
to
do
today
from
a
technical
perspective
before
we
kind
of
get
back
into
the
design
conversation
is
that
we
were
going
to
try
and
take
the
amq
broker
and
roddy
had
done
the
demo
of
the
game
server
which
used
amq,
and
he
spent
some
cycles
on
that
kind
of
shoving
it
into
a
container
and
maybe
we'll
let
him
share
his
screen.
A
If,
if
you
have
anything
roddy
to
show
about
kind
of
what
you
did
to
shove
it
in
a
container
and.
F
A
A
E
A
Yeah
sure
so
that's
I
think
orange
game
dev
right.
A
And
so
in
the
and
I'll
paste
this
into
the
restream
chat
for
those
who
are
curious.
So
in
red
hat
game
dev.
We
now
have
this
srt
game
server,
which
github
is
correctly
identified
as
being
c
c,
plus
and
so
rodney
spent
some
time.
You
had
to
kind
of
back
out
some
proprietary
stuff
on
this
side
or
was
that
the
client
again.
E
A
Oh
cool,
okay,
oh
yeah,
I
wasn't
sure
if
it
was
either
the
client
or
the
server
that
needed
easy
cleaning,
but
since
we're
going
to
kind
of
build
our
own
client,
if
you
will,
that
may
not
be
a
problem,
and
so
I
see
this
container
build
folder!
Oh
and
there's
a
docker
file,
yeah,
it's
cool
yeah.
E
E
Yeah
and
most
recently
had
been
like
10
11.6,
so
I
put
it
over
to
my
fedora
30
box
and
then
basically
made
a
container
which
reflected
the
state
of
my
box,
essentially,
which
was
all
the
dependent
libraries
up
there,
that
you
see
in
the
dnf
command
and
then
as
well.
Just
recently,
we
added
the
ability
to
specify
the
broker
uri
via
the
command
line,
so
that
when
you
run
containerized
it
doesn't,
it
knows
where
to
try
to
connect
to
so
you
can
see
there
online.
E
Right,
yeah
exactly
right,
so
then,
once
you
can
just
basically
deploy
the
image,
specify
the
broker
uri
in
your
environment.
You
should
be
off
to
the
races.
A
E
It
is
on
quite
a
lot
red
hat
dash
game,
dev,
srt
game
server.
I
think
that
is
0.6.
B
A
So
openshift
by
default,
randomizes
the
uid.
So
the
question
is
going
to
be
if
this
command
is
going
to
explode
or
not
if
it
runs
as
a
different
uid.
So
I.
A
That
probably
unique,
probably
unique
yep
I
mean
it's
unique
in
my
system
here
at
home.
E
A
A
E
E
A
B
A
B
A
A
Right,
I
think
it
is
it's
honestly,
like
other
than
the
sort
of
the
one
guy
who,
like
chops,
up
carcasses
with
the
things
that
they
make
like
to
prove
that
they're
sharp
the
show's
actually
really
good,
like
they
give
these
blacksmiths
very
interesting
challenges
to
to
make
weird
knives
and
swords
and
weapons
and
things
in
a
very
short
period
of
time
and
like
it's
just
really
interesting,
to
watch
how
they
problem
solve.
It's
kind
of
like
watching,
live
coding,
but
with
fire
and
metal.
A
Exactly
okay,
so
mr
roddy
one
thing
is
going
to
be
so:
here's
our
broker,
yep
and
let
me
go
into
the
console
for
it,
which
for
some
reason,
the
route
and-
and
this
is
going
to
be
sort
of
feedback
for
you
too,
because
I
believe
you
work
on
this
particular
thing.
A
A
A
Yeah,
it's
getting
something
like
that.
I'm
sure
it's
it's
something
like
that.
Let's
see
service
route
console
yeah,
so
I
want
to
go
to
the
brokers
console
and
then
I
want
to
go
to
the
console.
A
A
Together:
okay,
information-
that
is
new
to
me.
So
if
we
look
at
the
artemisi
thing,
what
we
will
see
is
I
have
an
address
already
for
the
game
lobby
that
I
created
using
a
crd,
so
this
is
going
to
be
like
more
power
of
operators,
kind
of
cool
stuff.
So
if
we
dig
into
the
cluster,
if
I
go
to
the
administrator
view
and
I
go
to
administration
and
I
go
to
custom
resource
definitions
and
I
go
to
activemqrtemus
address,
what
we
see
is
there
is
a
custom
resource
definition
for
an
activemq
address
and
I'll.
A
Let
rodney
explain
what
the
difference
is
between
addresses
and
queues
and
listeners
and
all
that
other
stuff,
but
we
basically
defined
in
yamo
hey.
We
want
an
address
named
lobby
with
a
queue
named
base
with
a
multicast
type,
and
when
we
create
this
yaml
instance,
the
activemq
operator
sees
it
and
basically
configures
the
broker
to
have
it
there.
So
here's
our
thing
that
I
basically
wrote
some
yaml
and
magically
it
appeared
in
here.
C
For
those
of
you
that
are
just
joining
us
and
haven't
been
on
previous
screen
streams
that
we've
done
all
of
this
is
open
shift
right
like
none
of
this
is
like.
Oh,
we
sat
and
like
configured
some
random
app
in
a
corner
right.
You
know
those
are
our
like
actual
gameplay
code,
but
all
this
back
and
stuff
right
all
of
the
red
hat
services
that
you
see.
That's
all
openshift,
that's
all
you
know
pretty
much.
You
know
multiple
click
and
yaml
file
deployments.
C
A
A
This
is
all
it
is
so
when
I
create
this
yaml
file,
because
I've
installed
the
operator
for
activemq
and
because
I
have
a
activemq
broker
defined,
which
caused
the
operator
to
deploy
the
broker
when
it
sees
this
activemq
rtms
address
called
lobby
in
the
srt
namespace.
It's
like,
oh,
I
know
about
that
broker,
I'm
going
to
configure
the
actual
broker
to
do
the
thing
that's
requested.
So
what
we
can
do
right
here
is
we
can
copy.
I
don't
know
why
I
did
that
with
highlighting
I'm
going
to
go
here.
A
B
B
B
E
A
The
chat
address
file
which.
A
Know
how
to
do
that
and
then
ps
go
to
mq.
This
is
gonna,
be
the
game.
Server
address,
cr
and
so
we'll
copy
this,
and
the
reason
that
we're
doing
what
we're
doing
right
now
is
the
the
game.
Server
expects
to
talk
to
a
broker.
The
game.
Client
will
talk
to
the
same
broker
and
the
end
user,
the
game
player
when
they
do
things
in
their
client
that
sends
messages
to
the
broker
and
then
the
game,
server,
picks
up
those
messages
and
then
performs
whatever
calculations
are
required
to
interpret
the
user's
actions.
A
It
then
sends
messages
back
to
the
broker,
which
then
go
back
to
the
client,
and
then
the
client
sees
so
to
speak.
Whatever
the
result
of
the
input
was
so
if
I
was
playing
a
platformer
and
I
hit
the
jump
button
that
would
turn
into
the
character
actually
jumping
and
then
the
client
would
render
the
character
jumping.
So
what
I
want
is
in
the
namespace
srt.
E
D
E
Source
into
application,
main
dot,
cpp.
G
E
So
we
can
see
here
right.
We
have
what
used
to
be
called
destinations
in
cms,
which
was
the
old
client.
That's
currently
still
being
used,
speak
a
destination
rather
than
an
address,
so
command
dot
in
is
for
incoming
commands
from
clients.
E
Actually,
address
name
command,
cue
name
command,
not
in
try
that
yeah
actually
leave
them
out
there,
because
so
so
we
just
step
back
a
second
like
I
said,
so
we
look
at
what
we're
using
the
newer
broker
now
call
active,
which
is
based
on
an
upstream
project
called
activemq
artemis
and
so
artemos
is
a
combination
of
the
previous
active
mq,
which
we
call
elected,
active
mq,
classic
that
this
was
basically
written
against
to
begin
with,
and
a
combination
of
red
hat's
code
base
for
something
called
hornet
queue.
E
So
the
community
there
had
decided
essentially
that
the
way
in
which
active
mq
was
written,
it
was
written
before
you
know.
Multi-Core
processors
were
very
common
on
the
desktop,
for
example,
so
symmetric
multiprocessing
wasn't
really
a
thing,
so
it's
very
heavy
with
mutexes
and
locks
and
very
large
thread
pools
that
kind
of
thing,
whereas
hornet
cue
was
kind
of
written
with
a
a
more
efficient
core
that
that
didn't
do
that
type
of
thing.
So
what
they
did.
E
They
took
the
hornet
q
code
base
and
they
took
the
active
mq
code
base
and
over
the
span
of
about
two
years,
they
made
them
into
this
new
thing
called
active
mq
artemis,
so
that
active
mq
as
a
message
broker
could
move
forward
into
this
into
this
more
parallel
and
concurrent
future,
where
we
basically
maxed
out
gigahertz
and
we're
just
throwing
cores
at
the
problem
right.
So
so
as
a
as
an
addendum,
then
to
moving
into
the
future.
E
They
wanted
a
more
flexible
addressing
model,
because
basically,
artemis
now
supports
five
different
protocols:
core
amqp,
stomp,
mqtt
and
open
wire.
So
previously,
active
mq
have
been
very
java,
jms
specification
based
with
the
open
wire
wire
protocol.
E
E
When
you
send
one
message,
it
goes
to
all
consumers
right
so
because
of
that,
there's
a
little
bit
of
a
mismatch
here
between
what
we
were
doing
in
the
past
individually
with
this
game
server
and
now
what
this
new
broker
provides
in
the
way
configuration,
and
so
we
just
moved
to
using
this
new
well
new
broker,
so
I
hadn't
even
really
tested.
I
tested
it
connected
to
the
to
the
broker,
but
I
didn't
actually
test
the
usage
at
this
point.
Sure
yeah.
A
A
No,
this
is
exciting,
so
for
those
who
are
watching
while
roddy
was
talking,
I
created
this
tiny
little
ammo
file.
That
said,
hey.
I
want
this
queue
with
an
address
and
almost
immediately
like
within
less
than
a
second,
the
operator
said.
Hey
I
created
what
you
asked
for
and
now,
if
we
refresh
the
interface,
actually
it
refreshed
itself.
So
if
I
look
in
the
addresses
now,
we
have
command
in
multicast
command.
In
so.
E
E
Like
you
know,
in
a
lot
of
cases,
so
a
lot
of
production
deployments
we
might
see-
I
don't
know
four
to
12
brokers
deployed
in
a
cluster
topology
in
order
to
handle
the
load
from
all
the
clients
coming
in
and
be
able
to
still
be
responsive
right.
So
normally,
what
you
have
to
do
here
is
like
either
go
to
each
one
individually
and
create
it
or
you'd,
write
a
shell
script
or
maybe
do
some
ansible
or
something
like
that.
But
in
this
case
what.
E
Will
do
yeah
it's
exactly
right.
It's
the
whole
idea
of
the
operator.
The
operator
just
goes
to
every
broker
for
you
and
creates
the
address
right
and
then
upon
scale
down
or
scale
up.
It'll
also
say:
oh
hey
you
scaled
down
and
you
scaled
up.
That's
a
new
broker.
We
need
to
add
the
address
to
that
one
for
you.
A
Very
cool,
so
this
I'm
actually
going
to
rename
this
file.
A
I
could
create
this
file
from
the
command
line,
just
like
oc
oc
create
f
whatever,
but
I'm
gonna
do
it
from
the
ui,
because
I'm
lazy,
I
don't
think
I'm
logged
in
so
we
click
the
plus
button
paste.
This
I'm
looking
at
the
logs
as
soon
as
I
hit
create.
If
I
go
oops
game
coming
up,
yeah.
A
See
look,
error,
validation,
that's
awesome.
Openshift
saved
my
butt
game
event
out
was
already
created
and
then,
if
I
look
here,
this
is
like
within
a
second
or
two
probably
going
to
refresh
itself.
G
C
A
All
right,
let's
look
at
the
project,
real
quick.
I
don't
know
why
it
keeps
highlighting
everything
if
we.
B
A
At
the
services-
and
this
is
roddy
I'll-
need
your
mental
magic
here.
This
amqp
0
service
is
the
amqp
acceptor
that
I
had
defined
right.
A
Well,
well,
that's
so
I
guess
those
two
things
are
separate
right.
If
I
defining
the
acceptor,
which
says:
hey,
listen
on
this
port
with
this
protocol
that
results
in
this
service
being
created.
E
A
E
E
A
A
E
A
Yeah
and
so
the
other
cool
thing
about
openshift
and
kubernetes
in
general,
is
it
does
name
resolution
inside
namespaces,
and
so,
if
we
look
at
the
end
dots
inside
a
pod,
I'm
going
to
go
and
just
pick
a
pot
at
random.
So
even.
A
Is
an
operator
it's
still
a
pod
running
in
the
in
the
name
space
if
I
go
into
the
terminal,
so
this
is
an
interactive
session
inside
this
infinite
man
operator
pod.
If
I
cat
the
resolve.conf.
A
What
we
see
is
the
expansion,
so
any
hostname
will
all
auto
search,
srt
service
cluster
local,
to
find
the
host
name
to
get
the
resolution,
and
so
because
we
have
a
service
named
blah
blah
blah
blah
blah.
I
can
just
use
the
short
name
of
this
service
when
I
try
to
connect
to
things.
If
we
go
back
to
the
code
that
roddy
has
and
we
look
at
the
dockerfile
or
the
container
file,
what
we
see
is
it
tries
to
connect
to
the
broker
uri
environment
variable.
A
I
will
just
call
the
broker
uri
or
sorry.
I
will
set
the
value
to
be
tcp
colon,
slash
service.
E
A
This
name
colon
5672
and
then
I
guess,
do
I
need
the.
A
Okay
cool
so
because
this
container
is
running
on
quay,
what
we
can
try
and
do
is
come
over
here
to
topology.
A
Actually,
I
didn't
need
to
do
that.
I
can
hit
the
add
button,
we'll
do
container
image,
qua.I,
io,
red
hat
game,
dev,
srt
game
server,
yep,
zero,
six,
zero.
A
Okay,
and
so
when
I
hit
the
tab
button,
you
see
this
little
validated
thing
it
actually
openshift
reached
out
and
queried
the
registry
to
figure
out
like
what
is
actually.
What
is
this
image?
Do
I?
What
do
I
know
about
it?
You
know
what
metadata
is
available
from
the
registry.
Oh
runtime,
icon,
that's
cool.
C
Yeah
I
want
to
take
this
second
just
to
say
thanks
for
all
the
follows,
we
got
tempest
drift
and
jar
back
purus
yeah,
and
we
also
got
like
a
massive
rate.
I
don't
know
if
you
guys
saw
like
a
minute
or
two
ago
we
had
like
50
people
like
jump
in
and
just
see
what's
up
with
that.
So
thanks
for
joining
us,
if
you
drop
by.
C
A
C
A
Call
it
game
server,
app,
that's
fine,
it
is
associated
with
other
things
that
will
be
called
game
server.
That's
also
fine.
Regular
kubernetes
deployment
is
also
fine.
We
don't
need
a
route
to
the
game
server
because
nobody's
going
to
talk
directly
to
the
game
server,
but
what
we
do
need
is
to
add
an
environment
variable
on
the
deployment
and
that
environment
variable
shall
be
known
as
broker
uri.
E
A
E
A
Okay,
so
this
is
gonna
blow
up
because
we
don't
actually
have
the
broker
listening
for
stomp
yet
so
this
will
be
actually
an
interesting
test
of
several
things.
I'm
going
to
go
ahead
and
deploy
this,
and
what
will
happen
is
we
will
see
our
tomcat
icon,
which
again
has
nothing
to
do
with
the
game
server,
because
it's
written
in
c.
So
it's
funny
that
it's
the
tomcat
icon
and
so
it's
container
creating,
which
is
just
it's
pulling
the
image
into
the
cluster.
D
E
E
A
And
then
deploy
it,
and
so
we
can
get
to
that
in
a
second
all
right,
I'm
going
to
do
the
right
thing
before
doing
the
wrong
thing,
so
you
said
that
we
need
a
stomp
acceptor.
I
will
add
it
to
this
file.
We
don't
need
stomp
to
be
exposed
externally,
so
I'm
actually
going
to
set
that
to.
E
E
E
Yeah
and
I
think
I've
gotten
that
feedback
a
number
of
times
now
it's
the
decision
to
do
that
made
sense
at
the
time
when
we
were
doing
the
development,
but
I
think
we're
going
to
need
to
revisit
it.
So
when
we
were
looking
at
that,
we
were
looking
at
some
of
our
other,
our
other
products
that
have
gone
down
this
road
with
their
crds
and
how
they
did
it,
and
this
was
the
route
that
they
took.
So
we
did
the
same.
A
A
In
a
weird
way,
yeah,
otherwise
I'd
have
to
go
to
the
admin
console.
D
A
A
E
Yeah,
when
you
click
save,
it
should
basically
restart
the
broker
pod
that
you
have.
I
believe.
E
A
E
A
Of
metal
production.
A
E
Do
we
have,
we
should
have
the
I
don't
see
that
we
have
five
six
seven
three.
A
A
E
For
some
reason
it
is
not.
The
first
thing
to
check
is
the
actual
broker
itself,
so
you
can
bring
up
the
log
for
the
broker
and
look
to
be
sure
that
the
protocol
itself
got
exposed
technology.
B
E
A
The
game
server
is
really
pissed
now
yeah,
and
so
you
see
the
broker
disappeared
really
quickly
and
so.
A
Create
the
broker,
if
we
look
at
the
ui
in
the
topology
view,
that's
really
angry.
Now.
D
D
A
No,
that's
the
that's
the
game.
Server.
E
E
And
delete
the
this
year,
hey.
A
A
E
So
if
it
hadn't
so
in
the
case
of
the
broker,
one
of
one
of
the
key
use
cases
for
a
broker
in
general
as
a
networking,
I
guess
component
is
for
running
stateful
right.
So
if,
if
you'd
killed
it
off
and
it
was
stateful,
what
would
happen
because
of
the
staple
set
is
that
the
pvc
would
remain
mapped,
which
is
the
persistent
volume
claim
for
that?
A
Yeah
so
one
thing
that
we
did
not
do
or
or
that
we
did
not
ask
the
operator
to
do
with
our
definition
was
we
didn't
ask
it
to
create
any
storage.
So
if
we
look
at
our
project
here,
the
only
pvcs
we
have
are
for
the
jboss
data
grid
and
for
the
key
cloak,
because
those
two
operators
the
way
that
they're
configured
they
did
that,
but
you
don't
see
a
claim
for
the
broker.
A
So,
as
roddy
was
saying
you
know,
normally
the
journal
gets
written
to
the
file
system,
which
is
mapped
onto
a
volume,
but
because
we
don't
have
that
when
we
destroyed
the
broker,
any
messages
that
had
yet
to
be
processed
would
have
been
lost.
A
I
think
we're
good
now,
so
we
have
that
service.
The
game
server
is
back
to
being
happy,
but
it's
still
looking
for
the
wrong
port.
I
bet
because
I
don't
think
we
finished
no.
A
E
E
D
A
I
was
more
gonna
say
like
because
the
game
server
is
not
doing
or
telling
us
anything
like.
We
wouldn't
know.
We
can
look
at
other
things
but
anyway,
but
this
is
cool
like
we're.
44
minutes
in
probably
20
of
those
were,
were
sort
of
bsing
and
chatting
so
really.
A
In
20
minutes
we
took
like
a
random
image
and
sort
of
got
it
going
and
used
some
operators
to
heavily
reconfigure
services
that
were
already
deployed
in
production
like
if
you
ignore
our
clowning
horrible
production,
hygiene
or
whatever,
like
okay,
fine.
We
took
a
major
outage
for
like
30
seconds
of
our
infrastructure.
A
You
know
the
messaging
broker,
like
chat,
went
down
for
30
seconds,
while
we
reconfigured
the
broker
for
whatever,
but
we
did
a
lot
of
stuff
with
like
very
little
code.
A
Yeah,
and
even
more
so
in
reality,
even
if
we
only
had
one
what
we
would
have
done,
if
we
realized
that
we
needed
to
like
sort
of
burn
it,
all
down
is
like
we
could
have
done
some
kind
of
like
a
b
ish
deployment,
where
we
spin
up
a
new
broker
and
then
point
all
the
services
at
the
new
broker
and
then
do
some
kind
of
what
that,
like
there's
a
million
ways
that
we
could
have
done
this.
That.
E
E
A
Yeah
super
fail
of
of
waiting
to
get
in
was
it
a
world
of
q
was
the
meme
that
was
going
around
the
other
day
when
world
of
warcraft
launched
their
new
their
new
expansion
and
like
nobody
could
get
in
anyway,
yeah.
So
now
that
we
have
the
game
server
running
how?
How
can
we
have
asked
talk
to
it?.
E
So
you
can
go
to
the
the
gui
for
the
broker
and
you
can
check
the
that
the
cues
exist,
which
you
know
they
do,
because
you
created
them
trying
to
think.
If
there's
any
messages
sent
in
the
beginning
from
the.
E
So
there's
no
message
of
saying
commanding
that
makes
sense
right.
There's
no
clients
just
went,
I
don't
know
if
there's
any
sense
starting
out
and
no
there's
not
because
it's
essentially
waiting
for
somebody
to
join
before
like
if
we
look
back
to
what
we've
done
previously,
like
nothing
happens
here
until
that
client
connects
and
then
basically
kicks
off
the
creation
of
the
entities
in
the
physics
simulation
and
then,
as
soon
as
that
happens,
then
there's
some
data
being
spewed
out
to
the
game
event.
A
Yeah,
so
is
there
there's
like
command
line
clients
for
mkp
right.
E
G
A
A
E
F
A
E
D
E
So
you
probably
need
to
connect,
and
then
you
may
need
to
create
a
session.
F
D
A
E
F
B
B
A
F
A
E
And
so,
as
a
result,
you
may
not
get
through
the
route
unless
you're
encrypted
and
have
tls
pass-through
configured
using
sni.
A
D
A
D
E
E
B
B
A
What
other
options
do
we
have?
Let's
see.
C
E
Yeah,
ideally
here
what
we
would
have
is
like
we'd
have
a
nice
little
container.
We
could
launch
containing
all
the
clients
and
then
you
could
just
like
log
into
the
terminal,
even
in
the
client
container
and
pick
the
client
you
want
to
use
for
testing,
and
then
you
know,
use
that,
then
to
generate
some
traffic
right
in
the
case
of
the
broker,
the
broker
itself
can
be
used
to
produce
and
consume
traffic,
but
only
by
the
core
protocol,
which
again
doesn't
help
us
in
this
case.
E
C
E
C
Yeah,
I
came
prepared
absolutely
so.
What
I
basically
did
here
is
kind
of
canonified
and
worked
through
our
game
design
document
that
we're
working
on.
So
while
eric
is
getting
a
stop,
client
up
and
running,
I
figured
I
will
pop
through
it
yeah,
so
we
kind
of
when
you're
building
out
a
game
like
this,
we
kind
of
talked.
C
I
think
two
sessions
ago,
a
little
bit
about
how
you
set
up
that
game
design,
but
it
all
starts
with
the
document
right
and
what
you're
doing
is
just
kind
of
putting
together
all
your
ideas
on
paper.
So
you
can
collaborate
with
your
teammates
and
build
out
your
vision.
So
first
thing
you
want
to
do
is
kind
of
summarize
what
you're
building
right
and
what
we're
building
is
a
massive
multiplayer
space
combat
arena
and
we're
really
focusing
on
those
large-scale
battles
right,
and
we
also
want
to
add
a
little
bit
of
level
strategy
right.
C
We're
not
just
going
to
make
a
game
that
isn't
fun
to
play
just
to
demo
things,
but
we
do
want
to
keep
in
mind
that
what
we're
doing
here
is
demoing
capabilities
of
openshift.
So
these
are
our
design
pillars
that
we've
settled
on
the
first
one
being
massive
scale.
Second,
one
being
persistence
right,
you
want
to
be
able
to
demonstrate
that
the
universe
that
players
are
inhabiting
is
persistent
and
can
live
on
openshift
over
time.
Of
course,
we
want
player
agency
right.
We
don't
just
want
this
to
be.
C
You
know
a
demo
where
you
click
and
connect,
and
it
says:
hey,
I'm
working,
you
want
to
be
able
to
prove
like
I
can
interact
with
this
system
and
participate
in
it
and,
of
course,
strategy
and
tactics,
because
you
know
what
is
a
game
without
the
layer
of
fun
in
intriguing
it
and,
of
course,
real
time
combat.
We
want
to
be
able
to
prove
that
openshift
can
handle
the
level
of
demand
necessary
with
real-time
games
and
not
just
kind
of
a
turn-based.
C
You
know
message
service
so
that
first
pillar
massive
scale,
that's
kind
of
the
thing
with
openshift
right.
That's
that's!
The
important
thing
about
cloud
native
development
is
that
scalability
is
now
a
known
problem.
It's
not
a
oh
god!
How
many
machines
do
we
have
to
buy
and
are
these
servers
designed
correctly
to
handle
our
you
know
our
server?
And
how
do
we
have
to
write
this
code
work
with
the
hardware
we
have
in
the
budget?
C
We
have
right
now
it's
a
lot
more
about
making
those
intelligent
decisions
and
trade-offs
in
a
space
where
you
don't
have
to
own
the
hardware.
You
don't
have
to
own
the
entire
setup
and
infrastructure,
but
instead
you
can
rely
on
the
expertise
and
services
of
others
and
scale
up
and
down
as
necessary.
So
you
don't
have
those
expenditures
constantly
costing
you
money
as
you're
working
through
development
deployment
and
your
life
cycle
of
the
game.
C
Persistence,
of
course,
is
important,
like
I
said,
because
we
want
people
to
be
able
to
experience
that
passage
of
time,
but
we
also
want
to
be
able
to
really
demonstrate
like
you
can
build
a
persistent
universe.
You
can
build
a
persistent
world
and
experience
with
open
shift
and
still
roll
through
updates
and
be
able
to
mitigate
problems
such
as
downtime
or
you
know,
large-scale
updates
and
deployments
that
affect
the
entirety
of
your
game.
C
Openshift
can
handle
that
with
ease
and
so
being
able
to
have
that
persistent
universe
makes
that
you
know
apparent
and
obvious
player
agency.
Of
course,
as
we
said,
is
important,
because
we
want
to
be
able
to
show
that
players
can
actually
interact
with
the
system.
It's
not
just
a
you
know
passive
demo,
but
we
also
wanted
to
be
able
to
design
the
game
where
the
players
could
choose
their
level
of
difficulty,
where
it's
their
choice
of
how
much
they
want
to
involve
themselves
in
the
game.
C
So
when
we're
handing
off
this
demo,
you
know
and
kind
of
showing
it
to
people
and
having
everyone.
You
know
in
the
twitch
chat,
connect
and
play
with
us.
It's
not
something
where
it's
like.
Oh
god,
you
know,
I
meant
it
on
destroyed
right,
but
you'd
be
able
to
kind
of
affect
and
choose
how
you
participate
in
the
demo
and
still
get
a
good
experience
out
of
it.
C
This
is
the
fun
part
of
the
game
right.
This
is
the
the
big
player
portion
strategy
and
tactics,
and
we
wanted
to
make
sure
that
the
way
you
interact
with
the
game
is
very
simplified.
It's
something
that
can
be
understood
very
quickly,
but
has
a
lot
of
potential
for
emergent
complexity
and
that's
kind
of
one
of
the
you
know.
Beautiful
things
about
game
design
is
allowing
for
that
emerging
complexity
to
really
affect
how
players
are
the
game
and
how
the
game
evolves
over
time.
So
that
means
we
really
want
to
make
it.
C
That
itself
right
is
a
very
simplistic
interaction,
very
simplistic
way
to
be
a
part
of
the
game
universe,
and
yet
it's
going
to
have
a
whole
lot
of
implications
for
the
player.
If
you're
positioning,
you
know
yourself
with
another
player
in
between
you
and
a
player,
that's
attacking
you
right!
That
player
is
going
to
intercept
those
different
energy
weapons
or
missiles,
or
whatever
else
is
going
on.
C
If
you're
able
to
time
it
right
where
you're
in
a
fast
ship
and
they're
in
a
slow
ship
right,
maybe
their
their
big
cannon
will
miss
or
hit
another
player
and
same
thing,
if
you're
in
a
slower
ship
right,
putting
yourself
in
the
space
to
be
most
effective
with
your
damage
and
make
the
best
use
of
your
time
in
the
game
and
get
the
most
resources.
C
You
know
those
are
all
going
to
be
decisions
you
can
make
simply
by
positioning
and
movement
and
then
same
thing,
of
course,
with
your
choice
and
repairs
and
upgrades
as
you
make
your
way
through
the
game.
There's
real-time
combat
it's
pretty
obvious
right.
This
isn't
going
to
be
turn-based
you're
not
going
to
be
tapping
through
a
queue
or
anything
like
that.
You're
in
real
time,
be
able
to
see
everything
unfold
in
front
of
you,
which
means
you
know
the
open
shift
deployment.
C
Our
game
server
will
have
to
be
reasonably
performing,
especially
at
the
massive
scale
that
we're
going
to
be
operating
and
deploying
on
openshift.
It's
also
important
to
receive
that
immediate
feedback
as
well.
We
have
a
summary
here
that
basically
is
kind
of
like
a
what?
What
can
the
game
you
know
feel
like
if
you're
playing
it
so
I'll?
Read
that
out
real
quick,
you
tap,
engage
and
watch
as
your
ship
warps
into
the
battlefield
within
moments
of
zooming
out
to
assess
the
situation
you
get
hit
with
a
blast
of
red
laser
fire.
C
The
fight
has
begun.
You
quickly,
scope
out
another
larger
ship
and
flee
behind
it
successfully,
letting
them
take
the
hit
from
the
massive
blast
of
a
quantum
cannon
from
your
pursuer.
You
arrive
on
the
other
side
of
the
patsy
behemoth
and
unleash
your
missile
barrage.
The
enemy
is
no
more.
However.
You
now
have
the
problematic
situation
of
needing
to
survive
against
your
faux
shield,
long
enough
to
upgrade
and
repair
so
that
kind
of
gives
you
kind
of
like
that
overview
of
like
what
do.
G
C
Of
like
the
big
yeah,
like
that's
the
pitch
statement,
right,
there's
the
hype,
there's
the
excitement.
Let's
do
it
core
mechanics.
As
we
said,
we
got
our
massive
scale,
we
got
persistence,
we
got
player
agency,
strategy,
tactics
and
real
time
and
combat
our
interface
is
all
going
to
be
mobile
and
browser
based
right.
So
that's
pinch
to
zoom
tap
to
move
same
thing.
You
know
you're
gonna,
click
or
use
your
scroll
wheel
and
then,
of
course,
we're
gonna
have
our
upgrade
and
repair
dialogue
as
you're
working
your
way
through
the
game.
C
So
that's
kind
of
a
summary
of
everything
that
we've
built
out
so
far.
I
don't
know
where
we're
at
with
our
our
stomp
client
here.
A
But
I'm
sort
of
doing
okay
getting
getting
through
it.
C
B
There's
that
aspect
of
it,
let's
see,
client
activate.
A
So
control
refresh
send
an
error
frame
to
the
stomp
client.
That's
nice,
so
we're
getting
closer
still
didn't
do
anything,
but
at
least
we
got
an
error.
Remote
disconnect.
B
E
Well,
you
got
this
connected
immediately
yeah,
so
thinking
back
to
the
to
the
configuration
earlier
looking
in
the
secret
for
the
username
and
password,
that
probably
will
mean
you
need
to
pass
those
along
as
a
part
of
the
uri
in
standard
uri
notation.
Oh.
E
I
think
I
think
that's
where
we're
going
wrong
and
I
think
also
that
also
means
thinking
back
to
the
code,
that's
written
for
the
game
server.
I
think,
as
this
was
a
proof
of
concept.
A
Okay,
so
let's
see
but.
E
I
don't
see
that
it
actually
surprises
any
credentials.
You
can
also
turn
off
the
broker.
Sierra
the
custom
resource.
D
E
Plan
yeah
there's
an
entry
rick
in
in
lower
camel
case,
require
login,
oh
so
yeah
campbell
case
capital
elder
sorry,
colon
space,
false.
B
B
F
A
G
D
A
Key
bindings
in
vs
code
copy
paste
buffer
all
right.
If
I
save
this,
and
then
we
go
back
to
the
broke
nope
just
wrong
place
topology.
G
E
E
G
E
F
B
F
D
D
G
E
More
top
yeah
yeah
at
the
very
very
top
you
can
see
what
the
arguments
are
that
are
passed
so
essentially,
the
way
it
works
at
the
moment
is
that
when
the
broker
container
starts
up
in
the
pod,
there's
an
instance
of
the
broker
created
and
these
flags
are
passed
through.
So,
as
you
can
see,
there,
the
require
login
to
take
effect
because
the
flag
was
passed
to
the
create
to
allow
anonymous
access.
E
Yeah,
so
that's
what
the
interesting
thing
is.
So
all
of
the
errors
from
the
broker
are
named,
like
that
at
least
all
the
important
ones
I
think
inside
the
broker
itself
in
the
java
code.
E
E
Okay,
there
you
go
so
wildfly
has
a
so
wildfly
is
the
upstream
of
eap,
and
so
both
wildfly
and
the
downstream.
A
E
G
E
If
you
create
an
address,
called
special,
that's
multicast.
F
A
E
E
F
E
C
E
A
C
E
F
E
E
A
E
E
A
Going
through
the
router
so
probably
not,
let's
see
stop.
E
D
A
E
B
D
A
F
D
B
B
Connection
connect:
what's
the.
B
B
E
E
A
E
Yeah,
so
if
I've
connected
at
this
point,
then
we're
not
getting
any
notifications.
So
in
the
case
of
the
the
old
broker
straight
active
mq,
we
would
get
a
message
there
saying
that
a
connection
was
accepted,
but
in
the
case
of
artemis
I
don't
know
that
that's
the
case,
so
that
doesn't
really
help
us
any.
E
B
C
Yeah
one
of
the
creators
or
authors
of
stomp.pi
has
a
developer.red
hat
blog
that
has
some
useful
debug
default
python
stuff.
B
E
B
A
Yeah,
so
what's
the,
what
did
I
want
to
publish
on.
B
E
E
Yeah
I
mean
I
don't,
I
don't
think
like
I
said,
there's
a
couple
of
pieces
of
the
puzzle
that
could
be
going
wrong
here
right,
so
we
could
be
being
intercepted
clearly
like,
and
we
know
for
sure
that
the
game
server
is
not
logging,
because
there's
very
little
logging
in
there.
E
G
E
Right,
but
I
don't
know
if
we're
getting
through
the
proxy
properly
right,
like
in
in
all
our
testing
internally
here
the
only
way
that
things
work
properly
from
the
broker's
point
of
view
and
we're
not,
I
guess,
stopped
at
the
proxy
is
if
you
had
tlssni
configured,
meaning
you
had
certificates
in
play
and
you
configure
the
route
to
be
passed
through
and.
A
E
F
A
F
G
E
E
E
Was
that
stomp
was
very
browser
compatible
right
and
that
you
could
use
websocket
with
stop
both
from
the
broker's
point
of
view,
the
client's
point
of
view
and
the
browser's
point
of
view.
B
To
stop
service
secure
the
route
edge,
termination
sure.
E
E
A
A
A
Well,
I
mean
we
still
haven't.
We
don't
actually
know
what's
wrong
like
that.
Error
is
not
helpful
or.
A
B
F
E
How
do
I
can
I
see
yep
there
you
go.
F
A
E
D
A
E
E
F
A
A
E
E
E
Yeah
so,
for
example,
in
the
case
of
the
broker,
when
we
were
testing
the
core
protocol,
which
is
a
non-browser
native
non-cloud
native
protocol,
it
was
not
sni
aware
and
one
of
the
things
we
had
to
fix.
For
example,
when
broker
7
was
released,
we
had
to
go
in
and
actually
add
the
sni
code
to
the
tls
implementation
of
the
protocol
to.
F
F
E
Yeah,
I
just
need
to
clean
up.
I
got
a
lot
of
windows
here.
E
A
C
A
And
then
the
other
question
would
be
like.
Are
you
using
some
c
library
I'm
still
sharing?
So
I
guess
I
can
figure
it
out.
E
Right
yeah,
so
if
you
want,
I
can
share
yeah.
E
B
D
E
E
C
A
C
E
E
Because,
at
the
time
what
I
wanted
to
do,
I
wanted
to
be
able
to
get
from
unity
through
a
broker
into
the
browser,
and
that
was
the
most
compliant
protocol
at
the
time
to
be
able
to
do
that.
E
They
could
handle
web
sockets
as
well
as
had
a
client
that
would
work
in
c
plus
plus,
which
would
allow
me
to
do
the
back-end
server,
we're
basically
making
a
move
to
mqp,
which
is
an
iso
standard
protocol,
amqp
1.0,
to
be
exact
so
that
the
downside
there
is
that
it's
tcp
based
and
hasn't
moved
to
being
udp
based
as
well,
yet
which,
from
a
game
server
point
of
view,
is
okay
well,
at
least
from
a
first
person.
Shooter
point
of
view
would
be
seen
as
kind
of
sucky
and
slow.
E
So
you
know
from
with
my
messaging
engineer
hat
on,
I
would
say
other
protocols
that
exist
would
be
core
which
we
kind
of
discussed,
isn't
an
open
but
not
standardized
protocol
from
hornet
q
days,
then
there's
mqtt,
which
of
course,
is
your
iot
native
kind
of
protocol
for
a
low-powered
embedded
devices.
E
Then
as
well,
then
there's
the
wire
format
open
wire,
which
was
used
in
active
mq
upstream
5.11
onward
and
is
was
basically
used
with
the
jms
java
specification
for
messaging
so
like
those
are
options
that
you
could
use,
but
generally
aren't
your
go-to
for
for
game
servers
right,
like
typically
game
servers
want
to
be
as
close
to
the
middle
as
possible,
really
fast
minimal
package
sizes.
E
E
E
Amqp
is
going
to
be
building
in
a
udp
support
so
that
it
can
support
other
business
type
protocols
like
sctp,
for
the
telco
space
and
then
in
the
future.
We
may
move
to
using
something
like
quick
quic,
which
is
currently
being
standardized
at
the
ietf
and
is
going
to
form
the
basis
of
http
3,
and
it
is
a
udp-based
protocol
which
enables
us
to
like
avoid
some
of
the
tcp
based
problems,
but
as
well
get
some
standardization.
C
Yeah
yeah,
the
tl
dr
for
you
lily
is
stomp,
is
our
protocol
that
we're
gonna
go
with
for
now,
simply
because
it
works
with
everything.
Does
everything
we
need
it
to
do
and
we're
not
gonna
sit
around
waiting
for
you
know
amqp
to
use
udp.
E
Yeah
we're
going
to
transition
to
amqp
what
the
original
code
that
we're
seeing
here
on
the
screen
was
all
written
with
a
using
a
client
that
was
pre-amqp
essentially.
E
E
E
So
here
we
can
see
that
we're
setting
up
basically
an
event,
so
this
is
kind
of
a
c
sharp
style
event
mechanism,
but
being
used
in
c
plus
through
the
poco
library.
So,
if
anybody's
familiar
with
boost,
the
poco
project
is
kind
of
a
a
standard,
open
library
of
c
plus
plus
functionality,
similar
in
some
ways
to
the
functionality
provided
by
boost,
but
perhaps
not
as
heavyweight
as
what
boost
might
be
seen
as.
E
So,
for
example,
here
we're
looking
at
so
essentially
we
can
see
right
here
that
the
event
response
from
the
command
consumer
to
handle
a
received,
cms
message
event
as
it
comes
in
as
a
bytes
message,
is
to
simply
on
cue
the
message
for
processing
and
not
necessarily
document
its
arrival
right.
So
even
if
we
were
to
do
something
like.
E
So
yeah,
so
one
of
the
tricky
parts
here
is
that
so
going
back
to
this
client
for
a
long
while
I
had
been
writing
c,
plus,
plus
extremely
heavily
between
2008
and
2012.
I
probably
wrote
you
know
a
few
hundred
thousand
lines,
or
even
more
of
my
own
code
for
my
own
engines
and
stuff
for
the
mobile
games
that
I
put
out,
but
most
recently
here
at
red
hat,
I've
been
writing
all
in
go.
E
So
I
actually
took
out
my
trusty
old
strew
strip
book
within
the
last
few
days.
D
E
To
refresh
myself
on
all
the
the
particulars,
but
now
I've
lost
the
go-isms.
I've
got
to
start
inserting
inserting
semicolons
and
stuff
automatically,
which
have
gone
the
way,
the
dinosaur
in
my
typing
and
build
up
some
more
muscle,
memory.
E
Yeah,
that
would
be
a
good
start.
Wouldn't
it
I
don't
see
it
we'll
see
how
it
being
there
see
how
we'll
probably
get
there
transitively
right.
E
E
E
A
F
D
E
E
D
E
A
E
D
A
Right
well,
thanks
ronnie,
thanks
derek
for
struggling
through.
All
of
that
I
wish
I
had
remembered
about
the
I
guess,
ryder,
you
sort
of
alluded
to
the
sni
thing,
and
I
just
it
didn't
register
in
my
brain
when
you
said
it,
but.
A
Kind
of
to
recap,
a
little
bit
of
today
right,
we,
we
got
the
game
server
image
running
and
we
actually
sort
of
got
it
to
talk
to
the
broker
and
we
showed
a
little
bit
more
about
kind
of
using
the
amq
operator,
and
you
know
making
all
those
things
talk
and
work
and
walk,
and
so
really,
at
this
point
now
we're
getting
closer
to
getting
a
functional
game
server
that
we
can
then
talk
to.
And
then
it
just
becomes
sort
of
this
back
and
forth.
A
Iteration
of
make
a
little
bit
of
the
client
to
do
the
thing
and
then
add
more
function
in
the
game
server
and
then
make
a
little
bit
of
the
client
and
then
the
game
server
and
at
some
point,
that'll
get
integrated
into
the
data
grid,
where
we
actually
pull
player
information
and
store
player
information
about
what's
going
on
in
the
universe
into
the
data
grid,
and
so
with
that
I
bid
all
of
you
farewell
happy
holidays
to
everyone.
No
matter
what
you
celebrate
or
if
you
don't
celebrate
anything
then
happy
winter
time.
F
D
A
A
And
so
we'll
continue
with
this
series
in
2021
and
we
look
forward
to
having
something
that
maybe
some
of
y'all
can
play
with
us
sometime
soon
cheers.