"a Client server model for a multi user, web based system forproviding a film and photograph library. In this system, severalservers manage and display the different types of media. Video framesneed to be transmitted quickly and in synchrony but at relatively lowresolution. They may be compressed in a store, so the video server canhandle video compression and decompression in different formats. Stillpictures, however, must be maintained at a high resolution, so it isappropriate to maintain them on a separate server. The catalog must beable to deal with a variety of queries and provide links into the webinformation system that includes data about the film and video clips,and an e commerce system that supports the sale of photographs, film,and video clips. The client program is simply an integrated userinterface, constructed using a web browser, to access these services."
Now my question is to test my understanding regarding this diagram, according to my understanding this system is a web system and we access it as a client through this system's web server which provides web pages for these videos and photographs. This means that we can't contact directly the other servers in this system which are video, picture and catalog servers, since they only provide information to this web server and this information is visible to me as a client through the retrieved web pages from this web server. Then this means that the bi directional arrows that exist between the network and the other servers (video, photo and catalog) are due to the fact that they communicate with the other servers including the web server not with clients, the only server that communicates with client is the web server. Is that right?
The functionality of this film/photo library system is organized into services, with each service delivered from a separate server. Each of the stand-alone servers provides specific services (category info, film with its backend db, and photo with its backend db). Clients are users of these services and access each server based on their specific requests.
The disadvantage of that is obvious too: each service is a single point of failure, so performance may be unpredictable because it depends on the network as well as the system. Also if services are owned by different organizations, there could be management issue too.
One approach is the for us to play 20 questions with you. Can you already make a "Guess the Number" game? Can you already make a Tic Tac Toe game? Can you make a Connect Four clone? Can you make a Pong clone? A Tetris clone? A Breakout clone? A Space Invaders clone? An Asteroids clone? Can you make a Galaga clone? Can you make a Super Mario Bros clone? Can you make them with multiple players on a single machine? Can you make them with persistent high scores systems? Can you make network chat clients? Can you embed a chat client into your game?
You could start with RPG Maker and put together a fairly good RPG with very little work, and with minimal software development skill. Even game development beginners can turn out a decent (yet small) game in a few days with that. You might try building something with GameMaker:Studio or GameSalad or Construct, they're rather comprehensive and easy to use even for people not familiar with programming. You might try something even bigger requiring more skills and effort, such as using Unreal or Unity as your engine, developing on from there. You might try simpler tools and libraries, maybe leverage SDL or Marmalade or LibGDX or Cocos2D-x, or any other libraries. Or you might be considering building everything from scratch yourself, which is about the most ambitious plan.
Do you have what it takes to build the game you want with those tools? If you're using tools for C++, or C#, or Java, or some other language, do you know them well enough to build what you want to build? If not, there is your thing to learn. Do you need more knowledge or more experience on specific topics within those tools? Only you know what you already know on the topics. Maybe you have minimal skill with the language. Maybe you're somewhat experienced with simple programming but need to learn more about specific topics, perhaps algorithms and data structures regarding containers, or searching, or graph manipulation, or state machines, or IPC, or networking, or whatever else.
You mention learning about server side, so you may need to get comfortable working with databases, get comfortable with writing communications libraries and protocols, get comfortable working with connectivity meshes and data persistence requirements, or keeping data consistent between machines, or working with locked resources, or understanding data isolation levels.
If you already know how to use those tools effectively, then try again with the first list. Can you make "guess the number" using the tools? Connect four? Pong? Tetris-style and Breakout-style games? Networked chat? Networked Tetris-style and Breakout-style games? Galaga-style shooters? Networked Galaga-style shooters?
At some point there is a boundary; one thing you are able to make today, the other thing you currently lack the skills or experience to make. Nobody knows what you should be learning (not even you) until you understand where that boundary is.
You have 90% of what you need to know. Given that you asked about this 3 years ago as well, I think your real problem is that you're procrastinating and waiting for the One True Book that will give you everything you need, instead of having a go right now and learning as you go along. But major software projects like this are not things you can just copy out of a book.
You have a 'shopping list' of all the things you want to know about - but almost all of them are covered to some degree in the books you have. Why do you think that the next book will give you a better answer than they already did?
Principles, ideas with example code or pseudocodes... - the Massively Multiplayer Game Development book has plenty of those. If they don't fit your project, start a topic here about your specifics, and how they differ from what you've read.
Project structure - start simple, and refactor as you go. You might want to consider keeping your server code and client code in separate libraries, maybe with shared code in a 3rd library. The rest is entirely up to you.
How/Where to handle AI - the server runs AI for the non-player characters. Clients will handle NPCs in a similar way to how they handle other players, i.e. the server tells the clients what they're doing.
After reading the replies. I realized that Kylotan is right, I am procrastinating. I keep worrying that I might start with incomplete knowledge and would make bad design decisions early on which could cause huge problems when I move to production.
Regarding your server 'procrastination', I'd suggest just getting started on receiving information from a client and broadcasting it out to other clients. Don't do too much client work until you have this working because the server controls the game, not the client.
Since it seems you're just looking for a collection of books, I'd recommend whatever is on the bargain bin at the bookstore and whatever you can find in secondhand stores and yard sales. Some will have good stuff in them, you'll be just as likely to read them, and they're cheap so you don't feel as bad when you sell them yourself at a yard sale or secondhand bookstore.
Well, my book of course :-). It is titled "Development and Deployment of Multiplayer Online Games" (planned at 9 volumes, currently Vol. I is printed, and Vol. II - Vol. III are available as early beta). E-book versions are available on Leanpub: -and-deployment-of-multiplayer-online-games-part-arch, and paperback Vol. I got to Amazon a few days ago.
A bit of bragging - "Early Praise" page within the book includes references by such people as Glenn Fiedler, Matt Pritchard, two GDC speakers, and CTO-like guys from more than one billion-dollar company...
We have seen that a two-tier approach seems to have some advantages, at least for applications that operate over networks. The client that is distributed to users may change, while the server part can be a centralised component that maintains dynamic, global data in a consistent and secure way for the organisation and for users to access and use. If a third party component, such as a web browser, provides the functionality required to support the application, then it can be adopted as part of the solution, with a significant saving of development effort. There is a potential disadvantage from splitting the application across a network in that data has to be transmitted over what may be a slow or unreliable connection.
1999-2024. All rights reserved. The Open University is incorporated by Royal Charter (RC 000391), an exempt charity in England & Wales and a charity registered in Scotland (SC 038302). The Open University is authorised and regulated by the Financial Conduct Authority in relation to its secondary activity of credit broking.
This pattern segregates the system into two main applications, where the client makes requests to the server. In many cases, the server is a database with application logic represented as stored procedures. This pattern helps to design distributed systems that involve a client system and a server system and a connecting network. The simplest form of client/server architecture involves a server application that is accessed directly by multiple clients. This is referred to as a two-tier architecture application. Web and application servers play the server role in order to receive client requests, process them, and send the responses back to the clients. The following figure is the pictorial representation of the client/server ...
I am currently making a MMORPG game, which is turn-based. The client is supposed to run on Android. Now, my friend is doing the graphics, and I have been doing the game classes (player, weaponry, etc.). Now, if the fight is started, the classes can be manipulated by interfaces (actually for my partner, it is like working with pure interfaces, he does not need any access to the implementaton classes).