Small content changes and spelling/grammar changes
This commit is contained in:
parent
4cf13b249f
commit
676989b82d
1 changed files with 103 additions and 105 deletions
208
report.lyx
208
report.lyx
|
@ -416,8 +416,8 @@ key "nethack:website"
|
||||||
.
|
.
|
||||||
The games often took place in a textual world, leaving the task of picturing
|
The games often took place in a textual world, leaving the task of picturing
|
||||||
the world up to the player.
|
the world up to the player.
|
||||||
Multi-player games were not as common as they are today, whereas most games
|
Multiplayer games were not as common as they are today, whereas most games
|
||||||
today are expected to have a multi-player mode, most early games did not.
|
today are expected to have a multiplayer mode, most early games did not.
|
||||||
\end_layout
|
\end_layout
|
||||||
|
|
||||||
\begin_layout Standard
|
\begin_layout Standard
|
||||||
|
@ -453,8 +453,8 @@ key "esa:website,thenumbers:website"
|
||||||
\begin_layout Standard
|
\begin_layout Standard
|
||||||
Due to the increasing importance of computer gaming, more focus should be
|
Due to the increasing importance of computer gaming, more focus should be
|
||||||
spent on improving the quality of the gaming service.
|
spent on improving the quality of the gaming service.
|
||||||
As more and more computer games are gaining multi-player capabilities,
|
As more and more computer games are gaining multiplayer capabilities, the
|
||||||
the demands for multiplayer networking software rises.
|
demands for multiplayer networking software rises.
|
||||||
This thesis is about techniques for improving the quality of this networking
|
This thesis is about techniques for improving the quality of this networking
|
||||||
software.
|
software.
|
||||||
\end_layout
|
\end_layout
|
||||||
|
@ -738,7 +738,7 @@ the nine nines
|
||||||
\begin_inset Formula $99.999999999\%$
|
\begin_inset Formula $99.999999999\%$
|
||||||
\end_inset
|
\end_inset
|
||||||
|
|
||||||
of availability, or rougly
|
of availability, or roughly
|
||||||
\begin_inset Formula $15ms$
|
\begin_inset Formula $15ms$
|
||||||
\end_inset
|
\end_inset
|
||||||
|
|
||||||
|
@ -757,11 +757,11 @@ Citation needed
|
||||||
industry would not have been accepted in the telecoms industry.
|
industry would not have been accepted in the telecoms industry.
|
||||||
This level of instability should not be accepted in the game server industry
|
This level of instability should not be accepted in the game server industry
|
||||||
either.
|
either.
|
||||||
An unavailabvle phone system could potentially have life threatening consequenc
|
An unavailable phone system could potentially have life threatening consequence
|
||||||
es, leaving the public unable to contant emergency services.
|
s, leaving the public unable to contact emergency services.
|
||||||
The same can not be said about an unavailable game server.
|
The same can not be said about an unavailable game server.
|
||||||
The statement that game servers are less important than phone systems is
|
The statement that game servers are less important than phone systems is
|
||||||
not a reason not to draw wisdom from what the telecoms have already learnt.
|
not a reason not to draw wisdom from what the telecoms have already learned.
|
||||||
\end_layout
|
\end_layout
|
||||||
|
|
||||||
\begin_layout Standard
|
\begin_layout Standard
|
||||||
|
@ -1271,9 +1271,8 @@ textbf{TCP}}{Transmission Control Protocol, a streaming network protocol}
|
||||||
|
|
||||||
\begin_layout Standard
|
\begin_layout Standard
|
||||||
The UDP protocol is not supported for communication between client and server.
|
The UDP protocol is not supported for communication between client and server.
|
||||||
The TCP protocol was chosen in favour of UDP, due to the fact that the
|
The TCP protocol was chosen in favor of UDP, due to the fact that the implement
|
||||||
implementation process using TCP was faster than if UDP would have been
|
ation process using TCP was faster than if UDP would have been used.
|
||||||
used.
|
|
||||||
UDP is generally considered to be faster than TCP for the transfer of game
|
UDP is generally considered to be faster than TCP for the transfer of game
|
||||||
(and other) related data, this is discussed in more depth in
|
(and other) related data, this is discussed in more depth in
|
||||||
\begin_inset CommandInset ref
|
\begin_inset CommandInset ref
|
||||||
|
@ -1333,7 +1332,7 @@ key "Farber:2002:NGT:566500.566508"
|
||||||
\emph on
|
\emph on
|
||||||
Counter Strike
|
Counter Strike
|
||||||
\emph default
|
\emph default
|
||||||
or massively multiplayer online role playing games (MMORPG:s), for example
|
or massively multiplayer online role playing games (MMORPGs), for example
|
||||||
|
|
||||||
\emph on
|
\emph on
|
||||||
World of Warcraft
|
World of Warcraft
|
||||||
|
@ -1402,8 +1401,8 @@ The first prototype of the GGS consisted of simple modules, however, due
|
||||||
Once the basic structure of the GGS had been established, the first prototype
|
Once the basic structure of the GGS had been established, the first prototype
|
||||||
was removed, remaining was the structure of the modules and the internal
|
was removed, remaining was the structure of the modules and the internal
|
||||||
flow of the application.
|
flow of the application.
|
||||||
This could be seen as an interative workflow, with the first prototype
|
This could be seen as an iterative workflow, with the first prototype being
|
||||||
being the first iteration.
|
the first iteration.
|
||||||
The second iteration later became the final result of the GGS.
|
The second iteration later became the final result of the GGS.
|
||||||
\end_layout
|
\end_layout
|
||||||
|
|
||||||
|
@ -1421,7 +1420,7 @@ The layout of the GGS is both layered and modular.
|
||||||
\begin_layout Standard
|
\begin_layout Standard
|
||||||
An informal specification and list of requirements of the system was outlined
|
An informal specification and list of requirements of the system was outlined
|
||||||
early on in the project.
|
early on in the project.
|
||||||
Usaility goals for developers were set.
|
Usability goals for developers were set.
|
||||||
During the project several demo applications were constructed, by constructing
|
During the project several demo applications were constructed, by constructing
|
||||||
these applications, the usability goals were enforced.
|
these applications, the usability goals were enforced.
|
||||||
\end_layout
|
\end_layout
|
||||||
|
@ -2037,7 +2036,7 @@ INDSTATE
|
||||||
|
|
||||||
\end_inset
|
\end_inset
|
||||||
|
|
||||||
alert the coordinator, de-registering the players
|
alert the coordinator, unregistering the players
|
||||||
\end_layout
|
\end_layout
|
||||||
|
|
||||||
\begin_layout Plain Layout
|
\begin_layout Plain Layout
|
||||||
|
@ -2112,7 +2111,7 @@ In a first person shooter game, the speed of delivery of messages is essential.
|
||||||
Failure to deliver messages in time results in choppy gameplay for the
|
Failure to deliver messages in time results in choppy gameplay for the
|
||||||
players.
|
players.
|
||||||
In strategy games, the reliability of delivery may be more important than
|
In strategy games, the reliability of delivery may be more important than
|
||||||
the speed, since the game is not perceieved as choppy even if the messages
|
the speed, since the game is not perceived as choppy even if the messages
|
||||||
are delayed.
|
are delayed.
|
||||||
\end_layout
|
\end_layout
|
||||||
|
|
||||||
|
@ -2142,7 +2141,7 @@ status open
|
||||||
Tue apr 26, 9:15.
|
Tue apr 26, 9:15.
|
||||||
Continue from here on.
|
Continue from here on.
|
||||||
Discuss which results we may expect in a fully fledged GGS system.
|
Discuss which results we may expect in a fully fledged GGS system.
|
||||||
What impedes the speeds, what raises the CPU load (and therefore the temperetur
|
What impedes the speeds, what raises the CPU load (and therefore the temperatur
|
||||||
es & power consumption).
|
es & power consumption).
|
||||||
What factors are there in the network saturation problem?
|
What factors are there in the network saturation problem?
|
||||||
\end_layout
|
\end_layout
|
||||||
|
@ -2387,8 +2386,7 @@ name "sec:Generic"
|
||||||
\begin_layout Standard
|
\begin_layout Standard
|
||||||
The GGS is a game server.
|
The GGS is a game server.
|
||||||
It was made with a desire to be suitable for any kind of game.
|
It was made with a desire to be suitable for any kind of game.
|
||||||
Any game with a client-server behaviour should be perfectly suited for
|
Any game with a client-server behavior should be perfectly suited for GGS.
|
||||||
GGS.
|
|
||||||
A game should not only be able to vary in terms of genre, graphics, gameplay
|
A game should not only be able to vary in terms of genre, graphics, gameplay
|
||||||
etc, but also in the way the game is implemented.
|
etc, but also in the way the game is implemented.
|
||||||
Such as different programming languages.
|
Such as different programming languages.
|
||||||
|
@ -2459,7 +2457,7 @@ In order to make the GGS prototype fault tolerant the programming language
|
||||||
|
|
||||||
\begin_layout Standard
|
\begin_layout Standard
|
||||||
The need for fault tolerance in game servers is not as obvious as it may
|
The need for fault tolerance in game servers is not as obvious as it may
|
||||||
be for other typ of servers.
|
be for other type of servers.
|
||||||
In general all servers strive to be fault tolerant as fault tolerance means
|
In general all servers strive to be fault tolerant as fault tolerance means
|
||||||
more uptime and a safer system.
|
more uptime and a safer system.
|
||||||
This applies to game servers as well, in brief good fault tolerance is
|
This applies to game servers as well, in brief good fault tolerance is
|
||||||
|
@ -3110,7 +3108,7 @@ end{centering}
|
||||||
status open
|
status open
|
||||||
|
|
||||||
\begin_layout Plain Layout
|
\begin_layout Plain Layout
|
||||||
Add clients on each side, and replace the cloud with phole-landlines being
|
Add clients on each side, and replace the cloud with pole-landlines being
|
||||||
cut by a pair of scissors
|
cut by a pair of scissors
|
||||||
\end_layout
|
\end_layout
|
||||||
|
|
||||||
|
@ -3196,11 +3194,11 @@ name "sec:Game-Development-Language"
|
||||||
There is only a very limited number of game developers who would like to
|
There is only a very limited number of game developers who would like to
|
||||||
write their games in Erlang, therefore we had to come up with something
|
write their games in Erlang, therefore we had to come up with something
|
||||||
to resolve this problem.
|
to resolve this problem.
|
||||||
The main idea was to offer a replacable module which would introduce a
|
The main idea was to offer a replaceable module which would introduce a
|
||||||
interface to different virtual machines which would run the game code.
|
interface to different virtual machines which would run the game code.
|
||||||
This way a game developer can write the game in his favourite language
|
This way a game developer can write the game in his favorite language while
|
||||||
while the server part still is written in Erlang and can benefit from all
|
the server part still is written in Erlang and can benefit from all of
|
||||||
of its advantages.
|
its advantages.
|
||||||
\end_layout
|
\end_layout
|
||||||
|
|
||||||
\begin_layout Subsection
|
\begin_layout Subsection
|
||||||
|
@ -3423,7 +3421,7 @@ The real time game chosen for testing the GGS is
|
||||||
Pong
|
Pong
|
||||||
\emph default
|
\emph default
|
||||||
, a game in which two players play a game involving a all and two paddles.
|
, a game in which two players play a game involving a all and two paddles.
|
||||||
The goal for each player is to shoot eside the othre player's paddle while
|
The goal for each player is to shoot beside the other players paddle while
|
||||||
not allowing the ball to pass by her own paddle.
|
not allowing the ball to pass by her own paddle.
|
||||||
The game requires real time updates and is quite demanding when played
|
The game requires real time updates and is quite demanding when played
|
||||||
in several instances concurrently.
|
in several instances concurrently.
|
||||||
|
@ -3516,7 +3514,7 @@ Overview of the prototype
|
||||||
|
|
||||||
\begin_layout Standard
|
\begin_layout Standard
|
||||||
The prototype of the GGS was developed using the Erlang language.
|
The prototype of the GGS was developed using the Erlang language.
|
||||||
The functional and concurrent style of Erlang facilitates devlopment of
|
The functional and concurrent style of Erlang facilitates development of
|
||||||
software based on a real-world model
|
software based on a real-world model
|
||||||
\begin_inset CommandInset citation
|
\begin_inset CommandInset citation
|
||||||
LatexCommand citep
|
LatexCommand citep
|
||||||
|
@ -3543,7 +3541,7 @@ Light Weight Processes; LWP
|
||||||
much like the threads in an operating system.
|
much like the threads in an operating system.
|
||||||
Threads in a Linux system, for example, are treated much like operating
|
Threads in a Linux system, for example, are treated much like operating
|
||||||
system processes in different systems.
|
system processes in different systems.
|
||||||
Due to the size of datastructures related to each process, swapping one
|
Due to the size of data structures related to each process, swapping one
|
||||||
process for another (known as
|
process for another (known as
|
||||||
\emph on
|
\emph on
|
||||||
context switching
|
context switching
|
||||||
|
@ -3607,7 +3605,7 @@ Erlang allows the GGS to create several process for each player connecting,
|
||||||
these processes can handle a multitude of different tasks, parsing data
|
these processes can handle a multitude of different tasks, parsing data
|
||||||
for example.
|
for example.
|
||||||
Since each task is handled by a different process, the tasks are clearly
|
Since each task is handled by a different process, the tasks are clearly
|
||||||
separated and the failiure of one is easily recovered without affecting
|
separated and the failure of one is easily recovered without affecting
|
||||||
the others.
|
the others.
|
||||||
\end_layout
|
\end_layout
|
||||||
|
|
||||||
|
@ -3721,9 +3719,9 @@ reference "fig:The-layout-of"
|
||||||
|
|
||||||
the entire GGS system is represented graphically.
|
the entire GGS system is represented graphically.
|
||||||
The circles marked with 'C' topmost in the picture represent game clients.
|
The circles marked with 'C' topmost in the picture represent game clients.
|
||||||
These circles represent processes running on gamers' computers, and not
|
These circles represent processes running on gamers computers, and not
|
||||||
on the GGS machine.
|
on the GGS machine.
|
||||||
If a game of chess is to be played on the server, the clients on the gamers'
|
If a game of chess is to be played on the server, the clients on the gamers
|
||||||
machines will be chess game clients.
|
machines will be chess game clients.
|
||||||
Clients connect through a network, pictured as a cloud, to the dispatcher
|
Clients connect through a network, pictured as a cloud, to the dispatcher
|
||||||
process in the GGS.
|
process in the GGS.
|
||||||
|
@ -3753,7 +3751,7 @@ name "sec:The-usage-of-erlang"
|
||||||
\begin_layout Standard
|
\begin_layout Standard
|
||||||
Erlang was designed by Ericsson, beginning in 1986, for the purpose of creating
|
Erlang was designed by Ericsson, beginning in 1986, for the purpose of creating
|
||||||
concurrent applications and improving telecom software.
|
concurrent applications and improving telecom software.
|
||||||
Features essential for the telecom instustry to achieve high availability
|
Features essential for the telecom industry to achieve high availability
|
||||||
in telecom switches were added to the language.
|
in telecom switches were added to the language.
|
||||||
\begin_inset ERT
|
\begin_inset ERT
|
||||||
status open
|
status open
|
||||||
|
@ -3774,7 +3772,7 @@ textbf{Mutex}}{A construct for achieving mutial exclusion, used to avoid
|
||||||
\end_layout
|
\end_layout
|
||||||
|
|
||||||
\begin_layout Standard
|
\begin_layout Standard
|
||||||
Erlang uses message passing in favour of shared memory, mutextes and locks,
|
Erlang uses message passing in favor of shared memory, mutexes and locks,
|
||||||
something which at the time was controversial among fellow developers
|
something which at the time was controversial among fellow developers
|
||||||
\begin_inset CommandInset citation
|
\begin_inset CommandInset citation
|
||||||
LatexCommand citet
|
LatexCommand citet
|
||||||
|
@ -3790,7 +3788,7 @@ key "Armstrong:2010:ERL:1810891.1810910"
|
||||||
\end_layout
|
\end_layout
|
||||||
|
|
||||||
\begin_layout Standard
|
\begin_layout Standard
|
||||||
In using message passing in favour of the methods commonly used at the time,
|
In using message passing in favor of the methods commonly used at the time,
|
||||||
the issues commonly associated with shared memory and locking were avoided.
|
the issues commonly associated with shared memory and locking were avoided.
|
||||||
In Erlang, everything is a process, and everything operates in its own
|
In Erlang, everything is a process, and everything operates in its own
|
||||||
memory space.
|
memory space.
|
||||||
|
@ -3824,8 +3822,8 @@ key "Armstrong03"
|
||||||
\end_layout
|
\end_layout
|
||||||
|
|
||||||
\begin_layout Standard
|
\begin_layout Standard
|
||||||
The strong isolation of Erlang processes make them ideal for multicore and
|
The strong isolation of Erlang processes make them ideal for multi-core
|
||||||
distributed systems.
|
and distributed systems.
|
||||||
Distribution of software is included as a fundamental part in the Erlang
|
Distribution of software is included as a fundamental part in the Erlang
|
||||||
language.
|
language.
|
||||||
The 'physical' location of a process, e.g.
|
The 'physical' location of a process, e.g.
|
||||||
|
@ -3840,7 +3838,7 @@ The distributed nature of Erlang is something the GGS makes use of when
|
||||||
scaling across several computers in order to achieve higher performance.
|
scaling across several computers in order to achieve higher performance.
|
||||||
The distribution is also important in creating redundancy.
|
The distribution is also important in creating redundancy.
|
||||||
Erlang promotes a non-defensive programming style in which processes are
|
Erlang promotes a non-defensive programming style in which processes are
|
||||||
allowed to crash and be restarted in favour of having the processes recover
|
allowed to crash and be restarted in favor of having the processes recover
|
||||||
from errors.
|
from errors.
|
||||||
The distributed nature of Erlang means supervisor processes (discussed
|
The distributed nature of Erlang means supervisor processes (discussed
|
||||||
in section
|
in section
|
||||||
|
@ -3948,16 +3946,16 @@ OTP
|
||||||
The OTP (Open Telecom Platform) is a set of standard libraries and design
|
The OTP (Open Telecom Platform) is a set of standard libraries and design
|
||||||
patterns, called
|
patterns, called
|
||||||
\emph on
|
\emph on
|
||||||
behaviours
|
behaviors
|
||||||
\emph default
|
\emph default
|
||||||
, which are used when developing Erlang systems.
|
, which are used when developing Erlang systems.
|
||||||
\end_layout
|
\end_layout
|
||||||
|
|
||||||
\begin_layout Standard
|
\begin_layout Standard
|
||||||
The GGS makes heavy use of the behaviours supplied in the OTP.
|
The GGS makes heavy use of the behaviors supplied in the OTP.
|
||||||
The behaviours impose a programming style suitable for distributed and
|
The behaviors impose a programming style suitable for distributed and concurren
|
||||||
concurrent applications, perfectly suitable for the GGS.
|
t applications, perfectly suitable for the GGS.
|
||||||
In particular, the GGS uses the following behaviours:
|
In particular, the GGS uses the following behaviors:
|
||||||
\end_layout
|
\end_layout
|
||||||
|
|
||||||
\begin_layout Itemize
|
\begin_layout Itemize
|
||||||
|
@ -3965,7 +3963,7 @@ The
|
||||||
\emph on
|
\emph on
|
||||||
supervisor
|
supervisor
|
||||||
\emph default
|
\emph default
|
||||||
behaviour, which is used when creating a supervisor.
|
behavior, which is used when creating a supervisor.
|
||||||
Supervisors are used when monitoring processes in the Erlang system.
|
Supervisors are used when monitoring processes in the Erlang system.
|
||||||
When a process exits wrongfully, the supervisor monitoring the process
|
When a process exits wrongfully, the supervisor monitoring the process
|
||||||
in question decides which action to take.
|
in question decides which action to take.
|
||||||
|
@ -3985,8 +3983,8 @@ The
|
||||||
\emph on
|
\emph on
|
||||||
gen_tcp
|
gen_tcp
|
||||||
\emph default
|
\emph default
|
||||||
behaviour, which is used to work with TCP sockets for network communication.
|
behavior, which is used to work with TCP sockets for network communication.
|
||||||
Using the gen_tcp behaviour, network messages are converted to internal
|
Using the gen_tcp behavior, network messages are converted to internal
|
||||||
Erlang messages and passed to a protocol parser, where the messages are
|
Erlang messages and passed to a protocol parser, where the messages are
|
||||||
processed further.
|
processed further.
|
||||||
\end_layout
|
\end_layout
|
||||||
|
@ -3996,14 +3994,14 @@ The
|
||||||
\emph on
|
\emph on
|
||||||
gen_server
|
gen_server
|
||||||
\emph default
|
\emph default
|
||||||
behaviour, which is used when constructing OTP servers in Erlang.
|
behavior, which is used when constructing OTP servers in Erlang.
|
||||||
Using this behaviour, a state can easily be kept in a server process, greatly
|
Using this behavior, a state can easily be kept in a server process, greatly
|
||||||
increasing the usefulness of the server process.
|
increasing the usefulness of the server process.
|
||||||
There are many gen_servers in the GGS, it is the most widely used behaviour
|
There are many gen_servers in the GGS, it is the most widely used behavior
|
||||||
in the project.
|
in the project.
|
||||||
In addition to intruducing a state to the server, the gen_server behaviour
|
In addition to introducing a state to the server, the gen_server behavior
|
||||||
also imposes patterns for synchronous and asynchronous communication between
|
also imposes patterns for synchronous and asynchronous communication between
|
||||||
other gen_servers and other OTP behaviours.
|
other gen_servers and other OTP behaviors.
|
||||||
\end_layout
|
\end_layout
|
||||||
|
|
||||||
\begin_layout Itemize
|
\begin_layout Itemize
|
||||||
|
@ -4011,14 +4009,14 @@ The
|
||||||
\emph on
|
\emph on
|
||||||
gen_fsm
|
gen_fsm
|
||||||
\emph default
|
\emph default
|
||||||
behaviour is used in the protocol parser module in the GGS.
|
behavior is used in the protocol parser module in the GGS.
|
||||||
Using the gen_fsm behaviour, finite state machines are easily developed.
|
Using the gen_fsm behavior, finite state machines are easily developed.
|
||||||
Protocol parsers are an ideal example of where to use finite state machines,
|
Protocol parsers are an ideal example of where to use finite state machines,
|
||||||
which are widely used for parsing strings of text.
|
which are widely used for parsing strings of text.
|
||||||
\end_layout
|
\end_layout
|
||||||
|
|
||||||
\begin_layout Standard
|
\begin_layout Standard
|
||||||
In addition to supplying behaviours, the OTP also has a style for packaging
|
In addition to supplying behaviors, the OTP also has a style for packaging
|
||||||
and running Erlang applications.
|
and running Erlang applications.
|
||||||
By packaging the GGS as an
|
By packaging the GGS as an
|
||||||
\emph on
|
\emph on
|
||||||
|
@ -4214,7 +4212,7 @@ tt [1,2,3]}
|
||||||
\series bold
|
\series bold
|
||||||
Strings
|
Strings
|
||||||
\series default
|
\series default
|
||||||
doubly qouted lists of characters, for example
|
doubly quoted lists of characters, for example
|
||||||
\begin_inset ERT
|
\begin_inset ERT
|
||||||
status open
|
status open
|
||||||
|
|
||||||
|
@ -4236,7 +4234,7 @@ tt "Hello world"}
|
||||||
Records
|
Records
|
||||||
\series default
|
\series default
|
||||||
are erlang tuples coupled with a tag for each tuple element.
|
are erlang tuples coupled with a tag for each tuple element.
|
||||||
This allows refering to elements by name instead of by position.
|
This allows referring to elements by name instead of by position.
|
||||||
An example of a record looks like this:
|
An example of a record looks like this:
|
||||||
\begin_inset ERT
|
\begin_inset ERT
|
||||||
status open
|
status open
|
||||||
|
@ -4298,8 +4296,8 @@ localstorage
|
||||||
by a call for the world object.
|
by a call for the world object.
|
||||||
Interaction with the players is done the same way using the player object
|
Interaction with the players is done the same way using the player object
|
||||||
instead.
|
instead.
|
||||||
The localstorage is a convenient way to store globals and other data seperated
|
The localstorage is a convenient way to store global data and other data
|
||||||
from the game state.
|
separated from the game state.
|
||||||
In section
|
In section
|
||||||
\begin_inset CommandInset ref
|
\begin_inset CommandInset ref
|
||||||
LatexCommand ref
|
LatexCommand ref
|
||||||
|
@ -4307,7 +4305,7 @@ reference "sub:Exposing-Erlang-functionality"
|
||||||
|
|
||||||
\end_inset
|
\end_inset
|
||||||
|
|
||||||
a concrete example of the implementation of the localStorage and world
|
a concrete example of the implementation of the localstorage and world
|
||||||
objects is given.
|
objects is given.
|
||||||
\begin_inset Note Note
|
\begin_inset Note Note
|
||||||
status open
|
status open
|
||||||
|
@ -4351,7 +4349,7 @@ name "sub:Exposing-Erlang-functionality"
|
||||||
\end_layout
|
\end_layout
|
||||||
|
|
||||||
\begin_layout Standard
|
\begin_layout Standard
|
||||||
This section contains a concrete example of how the localStorage and world
|
This section contains a concrete example of how the localstorage and world
|
||||||
objects are exposed to a GDL VM.
|
objects are exposed to a GDL VM.
|
||||||
The example comes from the GGS prototype, which uses JavaScript powered
|
The example comes from the GGS prototype, which uses JavaScript powered
|
||||||
by Google V8 as its GDL VM.
|
by Google V8 as its GDL VM.
|
||||||
|
@ -4428,10 +4426,10 @@ age must be connected to the GGS object, this can be seen in line 5.
|
||||||
\end_layout
|
\end_layout
|
||||||
|
|
||||||
\begin_layout Standard
|
\begin_layout Standard
|
||||||
Both the GGS and localStorage objects are dummy objects, which provide no
|
Both the GGS and localstorage objects are dummy objects, which provide no
|
||||||
functionality, these two objects are simply placed in the GDL for the purpose
|
functionality, these two objects are simply placed in the GDL for the purpose
|
||||||
clearing up the code.
|
clearing up the code.
|
||||||
In order to perform an action using the GGS and localStorage objects, the
|
In order to perform an action using the GGS and localstorage objects, the
|
||||||
|
|
||||||
\begin_inset ERT
|
\begin_inset ERT
|
||||||
status open
|
status open
|
||||||
|
@ -4847,7 +4845,7 @@ TODO: Go in to more detail about how the world, player and localstorage
|
||||||
status open
|
status open
|
||||||
|
|
||||||
\begin_layout Plain Layout
|
\begin_layout Plain Layout
|
||||||
My idea here is that we describe the erlang-js (which failed, but nontheless),
|
My idea here is that we describe the erlang-js (which failed, but nonetheless),
|
||||||
v8, UUID and other external communication.
|
v8, UUID and other external communication.
|
||||||
We shouldn't describe sockets here though..
|
We shouldn't describe sockets here though..
|
||||||
or..
|
or..
|
||||||
|
@ -4863,7 +4861,7 @@ external
|
||||||
\begin_inset Quotes erd
|
\begin_inset Quotes erd
|
||||||
\end_inset
|
\end_inset
|
||||||
|
|
||||||
to thre GDL.
|
to three GDL.
|
||||||
Discuss the GGS world object (there is a reference to this secxtion for
|
Discuss the GGS world object (there is a reference to this secxtion for
|
||||||
that purpose)
|
that purpose)
|
||||||
\end_layout
|
\end_layout
|
||||||
|
@ -4911,7 +4909,7 @@ target "http://www.objectmentor.com/resources/articles/srp.pdf"
|
||||||
\begin_layout Standard
|
\begin_layout Standard
|
||||||
The responsibility and concern of each module comes from the responsibility
|
The responsibility and concern of each module comes from the responsibility
|
||||||
and concern of the real-world entity the model represents.
|
and concern of the real-world entity the model represents.
|
||||||
The modelling of the GGS after a real world system was discussed in chapter
|
The modeling of the GGS after a real world system was discussed in chapter
|
||||||
|
|
||||||
\begin_inset CommandInset ref
|
\begin_inset CommandInset ref
|
||||||
LatexCommand vref
|
LatexCommand vref
|
||||||
|
@ -4998,8 +4996,8 @@ Is this the proper way to day the dispatcher greets connecting players?
|
||||||
|
|
||||||
The dispatcher is the module which handles the interfacing to the operating
|
The dispatcher is the module which handles the interfacing to the operating
|
||||||
system when working with sockets.
|
system when working with sockets.
|
||||||
Operating system limits concering the number of open files, or number of
|
Operating system limits concerning the number of open files, or number
|
||||||
open sockets are handled here.
|
of open sockets are handled here.
|
||||||
The operating system limits can impose problems on the GGS, this is discussed
|
The operating system limits can impose problems on the GGS, this is discussed
|
||||||
more in detail in chapter
|
more in detail in chapter
|
||||||
\begin_inset CommandInset ref
|
\begin_inset CommandInset ref
|
||||||
|
@ -5080,7 +5078,7 @@ reference "sub:The-protocol-parser"
|
||||||
\end_inset
|
\end_inset
|
||||||
|
|
||||||
.
|
.
|
||||||
Raw communication, witout passing the data through a protocol parser is
|
Raw communication, without passing the data through a protocol parser is
|
||||||
in theory possible, but is not useful.
|
in theory possible, but is not useful.
|
||||||
\end_layout
|
\end_layout
|
||||||
|
|
||||||
|
@ -5118,7 +5116,7 @@ The coordinator spawns a new player process, with the same socket reference
|
||||||
|
|
||||||
\begin_layout Enumerate
|
\begin_layout Enumerate
|
||||||
The player process resumes operation, immediately starting a new protocol
|
The player process resumes operation, immediately starting a new protocol
|
||||||
parser process, and begind receiving and sending network messaged again.
|
parser process, and begins to receive and send network messages again.
|
||||||
\end_layout
|
\end_layout
|
||||||
|
|
||||||
\begin_layout Standard
|
\begin_layout Standard
|
||||||
|
@ -5165,7 +5163,7 @@ name "sub:The-protocol-parser"
|
||||||
\end_layout
|
\end_layout
|
||||||
|
|
||||||
\begin_layout Standard
|
\begin_layout Standard
|
||||||
The protocol parser is an easily interchangable module in the GGS, handling
|
The protocol parser is an easily interchangeable module in the GGS, handling
|
||||||
the client-to-server, and server-to-client protocol parsing.
|
the client-to-server, and server-to-client protocol parsing.
|
||||||
In the GGS prototype, there is only one protocol supported, namely the
|
In the GGS prototype, there is only one protocol supported, namely the
|
||||||
|
|
||||||
|
@ -5174,7 +5172,7 @@ GGS Protocol
|
||||||
\emph default
|
\emph default
|
||||||
.
|
.
|
||||||
The role of the protocol parser is to translate the meaning of packets
|
The role of the protocol parser is to translate the meaning of packets
|
||||||
sent using the prototocol in use to internal messages of the GGS system.
|
sent using the protocol in use to internal messages of the GGS system.
|
||||||
The GGS protocol, discussed below is used as a sample protocol in order
|
The GGS protocol, discussed below is used as a sample protocol in order
|
||||||
to explain how protocol parsers can be built for the GGS.
|
to explain how protocol parsers can be built for the GGS.
|
||||||
\end_layout
|
\end_layout
|
||||||
|
@ -5191,7 +5189,7 @@ name "sub:The-structure-of"
|
||||||
\end_layout
|
\end_layout
|
||||||
|
|
||||||
\begin_layout Standard
|
\begin_layout Standard
|
||||||
The GGS protocol is modelled after the HTTP protocol.
|
The GGS protocol is modeled after the HTTP protocol.
|
||||||
The main reason for this is the familiarity many developers already have
|
The main reason for this is the familiarity many developers already have
|
||||||
with HTTP due to its presence in internet software.
|
with HTTP due to its presence in internet software.
|
||||||
Each GGS protocol packet contains a headers section.
|
Each GGS protocol packet contains a headers section.
|
||||||
|
@ -5240,10 +5238,10 @@ Line 4 specifies the content length of the payload following immediately
|
||||||
|
|
||||||
\begin_layout Standard
|
\begin_layout Standard
|
||||||
The parser of the GGS protocol implemented in the GGS prototype is designed
|
The parser of the GGS protocol implemented in the GGS prototype is designed
|
||||||
as a finite state machine using the gen_fsm behaviour.
|
as a finite state machine using the gen_fsm behavior.
|
||||||
When a full message has been parsed by the parser, the message is converted
|
When a full message has been parsed by the parser, the message is converted
|
||||||
into the internal structure of the GGS messages, and sent in to the system
|
into the internal structure of the GGS messages, and sent in to the system
|
||||||
from the protocol paser using message passing.
|
from the protocol parser using message passing.
|
||||||
\end_layout
|
\end_layout
|
||||||
|
|
||||||
\begin_layout Standard
|
\begin_layout Standard
|
||||||
|
@ -5559,11 +5557,11 @@ The game VM contains the state of the VM and a table token associated with
|
||||||
|
|
||||||
\begin_layout Standard
|
\begin_layout Standard
|
||||||
The VM itself makes it possible for the game developer to program in the
|
The VM itself makes it possible for the game developer to program in the
|
||||||
prograimming language covered by the VM.
|
programming language covered by the VM.
|
||||||
In future releases, more game VM:s will be added to support more programming
|
In future releases, more game VM:s will be added to support more programming
|
||||||
languages.
|
languages.
|
||||||
Because the game VM keeps track of the correct table, the game developer
|
Because the game VM keeps track of the correct table, the game developer
|
||||||
doesn't need to take this into consideration when programming a game.
|
does not need to take this into consideration when programming a game.
|
||||||
If a method within the game sends data to a player, it will be delivered
|
If a method within the game sends data to a player, it will be delivered
|
||||||
to the player in the correct running game.
|
to the player in the correct running game.
|
||||||
The same game token is used to store the game state in the database.
|
The same game token is used to store the game state in the database.
|
||||||
|
@ -5635,7 +5633,7 @@ key "667766"
|
||||||
\begin_layout Standard
|
\begin_layout Standard
|
||||||
The features of Mnesia originally intended for telecoms prove very useful
|
The features of Mnesia originally intended for telecoms prove very useful
|
||||||
for the purposes of the GGS as well.
|
for the purposes of the GGS as well.
|
||||||
The fault tolerance and speed of Mnesia are very valueable tools, the fast
|
The fault tolerance and speed of Mnesia are very valuable tools, the fast
|
||||||
key/value lookups permit many lookups per second to the database.
|
key/value lookups permit many lookups per second to the database.
|
||||||
\end_layout
|
\end_layout
|
||||||
|
|
||||||
|
@ -5674,8 +5672,8 @@ Each game is uniquely identified by a table token and the data of each game
|
||||||
The World is used contain all game data related to the game state.
|
The World is used contain all game data related to the game state.
|
||||||
This sort of game data may change during the runtime of the game.
|
This sort of game data may change during the runtime of the game.
|
||||||
The Localstorage should contain data independent of the game state.
|
The Localstorage should contain data independent of the game state.
|
||||||
Game resources, constants and globals are all examples of data that could
|
Game resources, constants and global variables are all examples of data
|
||||||
reside within the Localstorage.
|
that could reside within the Localstorage.
|
||||||
To store a value within the database, not only is the table token and the
|
To store a value within the database, not only is the table token and the
|
||||||
name of the namespace required, but a unique key so that the value can
|
name of the namespace required, but a unique key so that the value can
|
||||||
be successfully retrieved or modified later.
|
be successfully retrieved or modified later.
|
||||||
|
@ -5686,7 +5684,7 @@ Each game is uniquely identified by a table token and the data of each game
|
||||||
\begin_layout Standard
|
\begin_layout Standard
|
||||||
The interface of the database module is an implementation of the upcoming
|
The interface of the database module is an implementation of the upcoming
|
||||||
W3C Web Storage specification.
|
W3C Web Storage specification.
|
||||||
Web Storage is intended for use in web browsers, providing a persistant
|
Web Storage is intended for use in web browsers, providing a persistent
|
||||||
storage on the local machine for web applications.
|
storage on the local machine for web applications.
|
||||||
The storage can be used to communicate in between browser windows (which
|
The storage can be used to communicate in between browser windows (which
|
||||||
is difficult when using cookies), and to store larger chunks of data
|
is difficult when using cookies), and to store larger chunks of data
|
||||||
|
@ -5743,7 +5741,7 @@ The player module, which is coupled to the TCP-module to react on incoming
|
||||||
\begin_layout Enumerate
|
\begin_layout Enumerate
|
||||||
The protocol parser parses the message and brings it into the format of
|
The protocol parser parses the message and brings it into the format of
|
||||||
the internal GGS presentation of such a message, which is just a specialized
|
the internal GGS presentation of such a message, which is just a specialized
|
||||||
Erlang touple
|
Erlang tuple
|
||||||
\end_layout
|
\end_layout
|
||||||
|
|
||||||
\begin_layout Enumerate
|
\begin_layout Enumerate
|
||||||
|
@ -5751,7 +5749,7 @@ The protocol parser sends this Erlang touple back to the player module
|
||||||
\end_layout
|
\end_layout
|
||||||
|
|
||||||
\begin_layout Enumerate
|
\begin_layout Enumerate
|
||||||
The player module checks if it is a Server-Command or a Game-Commane.
|
The player module checks if it is a Server-Command or a Game-Command.
|
||||||
In our example it is a Game-Command and it sends the message to the table
|
In our example it is a Game-Command and it sends the message to the table
|
||||||
module
|
module
|
||||||
\end_layout
|
\end_layout
|
||||||
|
@ -5806,7 +5804,7 @@ reference "sec:Example-of-a-GGS-server-application-in-JavaScript"
|
||||||
|
|
||||||
\end_inset
|
\end_inset
|
||||||
|
|
||||||
) we see that the GGS-functios
|
) we see that the GGS-functions
|
||||||
\emph on
|
\emph on
|
||||||
GGS.localStorage.setItem(key, value)
|
GGS.localStorage.setItem(key, value)
|
||||||
\emph default
|
\emph default
|
||||||
|
@ -5828,8 +5826,8 @@ In the example the
|
||||||
\emph on
|
\emph on
|
||||||
GGS.sendCommandToAll()
|
GGS.sendCommandToAll()
|
||||||
\emph default
|
\emph default
|
||||||
is beeing called then which is a callback to a function of the table module
|
is being called then which is a callback to a function of the table module
|
||||||
which iterates thrugh its player list and sends the command to every player
|
which iterates through its player list and sends the command to every player
|
||||||
\end_layout
|
\end_layout
|
||||||
|
|
||||||
\begin_layout Enumerate
|
\begin_layout Enumerate
|
||||||
|
@ -5896,8 +5894,8 @@ GGS.sendCommand(player_id, command, args)
|
||||||
GGS.
|
GGS.
|
||||||
\emph default
|
\emph default
|
||||||
sendCommandToAll(command, args).
|
sendCommandToAll(command, args).
|
||||||
The localStorage is a convenient way to store globals and other variables
|
The localstorage is a convenient way to store global data and other variables
|
||||||
seperated from the game state.
|
separated from the game state.
|
||||||
Unique id:s called gametokens are generated for hosted games so that they
|
Unique id:s called gametokens are generated for hosted games so that they
|
||||||
are not mixed up.
|
are not mixed up.
|
||||||
\begin_inset ERT
|
\begin_inset ERT
|
||||||
|
@ -6454,7 +6452,7 @@ In Erlang, we have a simple version of supervisors.
|
||||||
\end_layout
|
\end_layout
|
||||||
|
|
||||||
\begin_layout Standard
|
\begin_layout Standard
|
||||||
When the linking of processes in order to monitor exit behaviour is coupled
|
When the linking of processes in order to monitor exit behavior is coupled
|
||||||
with the transparent distribution of Erlang, a very powerful supervision
|
with the transparent distribution of Erlang, a very powerful supervision
|
||||||
system is created.
|
system is created.
|
||||||
For instance, we can restart a failing process on a different, new node,
|
For instance, we can restart a failing process on a different, new node,
|
||||||
|
@ -6594,7 +6592,7 @@ To prevent any data loss, the good state of the worker processes is stored
|
||||||
\end_layout
|
\end_layout
|
||||||
|
|
||||||
\begin_layout Subsection
|
\begin_layout Subsection
|
||||||
Reduncancy
|
Redundancy
|
||||||
\end_layout
|
\end_layout
|
||||||
|
|
||||||
\begin_layout Standard
|
\begin_layout Standard
|
||||||
|
@ -6675,7 +6673,7 @@ name "fig:redundancy"
|
||||||
\end_inset
|
\end_inset
|
||||||
|
|
||||||
To the left normal execution is pictured; the server state is backed up.
|
To the left normal execution is pictured; the server state is backed up.
|
||||||
To the right; the exceptional excution, where the state is retrieved from
|
To the right; the exceptional execution, where the state is retrieved from
|
||||||
the backup to repopulate the server.
|
the backup to repopulate the server.
|
||||||
\end_layout
|
\end_layout
|
||||||
|
|
||||||
|
@ -6731,7 +6729,7 @@ playerCommand
|
||||||
\emph on
|
\emph on
|
||||||
main()
|
main()
|
||||||
\emph default
|
\emph default
|
||||||
function of a C or Java programm
|
function of a C or Java program
|
||||||
\emph on
|
\emph on
|
||||||
.
|
.
|
||||||
|
|
||||||
|
@ -6779,7 +6777,7 @@ nick
|
||||||
\begin_inset Quotes erd
|
\begin_inset Quotes erd
|
||||||
\end_inset
|
\end_inset
|
||||||
|
|
||||||
with the actuall new nickname as a argument.
|
with the actual new nickname as a argument.
|
||||||
When a message arrives to the GGS which has the form corresponding to the
|
When a message arrives to the GGS which has the form corresponding to the
|
||||||
nickname change, the
|
nickname change, the
|
||||||
\emph on
|
\emph on
|
||||||
|
@ -6820,7 +6818,7 @@ nick
|
||||||
\emph on
|
\emph on
|
||||||
changeNick
|
changeNick
|
||||||
\emph default
|
\emph default
|
||||||
function uses a feature of the GGS called localStorage (see section
|
function uses a feature of the GGS called localstorage (see section
|
||||||
\begin_inset CommandInset ref
|
\begin_inset CommandInset ref
|
||||||
LatexCommand ref
|
LatexCommand ref
|
||||||
reference "sec:Communication-with-the-GDL-VM"
|
reference "sec:Communication-with-the-GDL-VM"
|
||||||
|
@ -7178,7 +7176,7 @@ There were two possible solutions to the problem of the JavaScript to Erlang
|
||||||
|
|
||||||
\begin_layout Standard
|
\begin_layout Standard
|
||||||
Attempts at creating the communication path from JavaScript to Erlang were
|
Attempts at creating the communication path from JavaScript to Erlang were
|
||||||
initially made, however the communiucation path never became stable enough
|
initially made, however the communication path never became stable enough
|
||||||
for usage in the GGS and the erlang_js software was abandoned.
|
for usage in the GGS and the erlang_js software was abandoned.
|
||||||
\end_layout
|
\end_layout
|
||||||
|
|
||||||
|
@ -7274,7 +7272,7 @@ n of TCP instead of UDP, thus losing some speed.
|
||||||
\end_layout
|
\end_layout
|
||||||
|
|
||||||
\begin_layout Standard
|
\begin_layout Standard
|
||||||
Furthermore, in a move to increase the speed of the GGS prototcol the binary
|
Furthermore, in a move to increase the speed of the GGS protocol the binary
|
||||||
BSON protocol
|
BSON protocol
|
||||||
\begin_inset CommandInset citation
|
\begin_inset CommandInset citation
|
||||||
LatexCommand citet
|
LatexCommand citet
|
||||||
|
@ -7283,7 +7281,7 @@ key "bson:website"
|
||||||
\end_inset
|
\end_inset
|
||||||
|
|
||||||
was initially considered.
|
was initially considered.
|
||||||
BSON is a protocol which can be used for vert fast traversal of data.
|
BSON is a protocol which can be used for very fast traversal of data.
|
||||||
The BSON protocol is however rather difficult to read in its plain format,
|
The BSON protocol is however rather difficult to read in its plain format,
|
||||||
and no implementation has been bade for the GGS.
|
and no implementation has been bade for the GGS.
|
||||||
\end_layout
|
\end_layout
|
||||||
|
@ -7305,7 +7303,7 @@ key "Slee2007"
|
||||||
|
|
||||||
\begin_layout Standard
|
\begin_layout Standard
|
||||||
The use of Thrift, BSON, or other protocols can be supported quite easily
|
The use of Thrift, BSON, or other protocols can be supported quite easily
|
||||||
by develpping protocol modules for each protocol.
|
by developing protocol modules for each protocol.
|
||||||
No protocol modules for these protocols have however been developed during
|
No protocol modules for these protocols have however been developed during
|
||||||
the writing of this thesis
|
the writing of this thesis
|
||||||
\end_layout
|
\end_layout
|
||||||
|
@ -7662,7 +7660,7 @@ Future improvements
|
||||||
\begin_layout Standard
|
\begin_layout Standard
|
||||||
The specification of the GGS prototype is huge and like many other software
|
The specification of the GGS prototype is huge and like many other software
|
||||||
projects relying on outside technologies, in time it would require a lot
|
projects relying on outside technologies, in time it would require a lot
|
||||||
of maintanance.
|
of maintenance.
|
||||||
Therefore there are a lot of areas in which the GGS could be improved such
|
Therefore there are a lot of areas in which the GGS could be improved such
|
||||||
as performance, compatibility, ease of setup and usage.
|
as performance, compatibility, ease of setup and usage.
|
||||||
\end_layout
|
\end_layout
|
||||||
|
@ -7678,14 +7676,14 @@ Protocols
|
||||||
\begin_layout Standard
|
\begin_layout Standard
|
||||||
Because of TCP being a connection oriented protocol, it is not suited for
|
Because of TCP being a connection oriented protocol, it is not suited for
|
||||||
all types of game data transfers.
|
all types of game data transfers.
|
||||||
Each transmission will consume more network bandwith than connectionless
|
Each transmission will consume more network bandwidth than connectionless
|
||||||
protocols like UDP and cause uneccessary load on the processor.
|
protocols like UDP and cause unnecessary load on the processor.
|
||||||
Therefore support for UDP would mean that more games could be run simultaneousl
|
Therefore support for UDP would mean that more games could be run simultaneousl
|
||||||
y on the GGS.
|
y on the GGS.
|
||||||
Another advantage of UDP is latency being reduced.
|
Another advantage of UDP is latency being reduced.
|
||||||
Without having to setup a connection for each group packets of data being
|
Without having to setup a connection for each group packets of data being
|
||||||
sent, they will be sent instantly and therefore arrive earlier.
|
sent, they will be sent instantly and therefore arrive earlier.
|
||||||
Latency is of highest importance in realtime games as it improves realism
|
Latency is of highest importance in real-time games as it improves realism
|
||||||
and fairness in gameplay and many game developers requires the freedom
|
and fairness in gameplay and many game developers requires the freedom
|
||||||
to take care of safety issues as packet losses themselves.
|
to take care of safety issues as packet losses themselves.
|
||||||
This concludes that UDP would be a benefit for the GGS, game developers
|
This concludes that UDP would be a benefit for the GGS, game developers
|
||||||
|
@ -7735,7 +7733,7 @@ GGS relies on modern technologies.
|
||||||
Therefore it would be best for the GGS to have as many of these VM:s implemente
|
Therefore it would be best for the GGS to have as many of these VM:s implemente
|
||||||
d as possible.
|
d as possible.
|
||||||
The VM:s taken into consideration so far have been unstable or incomplete
|
The VM:s taken into consideration so far have been unstable or incomplete
|
||||||
and it is possible to search for more VM:s, testing them and intergrate
|
and it is possible to search for more VM:s, testing them and integrate
|
||||||
them into the GGS prototype.
|
them into the GGS prototype.
|
||||||
\end_layout
|
\end_layout
|
||||||
|
|
||||||
|
@ -7744,8 +7742,8 @@ Setup
|
||||||
\end_layout
|
\end_layout
|
||||||
|
|
||||||
\begin_layout Standard
|
\begin_layout Standard
|
||||||
The GGS prototype installation procedure requires different configuring
|
The GGS prototype installation procedure requires different configuration
|
||||||
and building steps and thus it isn't in an acceptable release state.
|
and building steps and thus it is not in an acceptable release state.
|
||||||
An executable installation file for each supported platform would be optimal.
|
An executable installation file for each supported platform would be optimal.
|
||||||
\end_layout
|
\end_layout
|
||||||
|
|
||||||
|
@ -7801,7 +7799,7 @@ addcontentsline{toc}{section}{Glossary}
|
||||||
|
|
||||||
|
|
||||||
\backslash
|
\backslash
|
||||||
\printnomenclature
|
|
||||||
\end_layout
|
\end_layout
|
||||||
|
|
||||||
\end_inset
|
\end_inset
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue