Title: Games, chat, and finance
1Games, chat, and finance Toward a truly
interactive web with Comet, BAM, and HMTP
Emil Ong Chief Evangelist
2Caucho Technology
- Resin has been around for 10 years
- Over 8000 customers, even more open source users
- User base consists of both early and conservative
adopters - Now the top Java web server in NetCraft
- http//survey.netcraft.com/Reports/200805/
- 340,000 domains
3Groundbreaking Innovations
- Hessian web services protocol
- Top clustering implementation
- Quercus PHP in Java
- Server-push
- And now... a revolutionary approach to the
interactive web
4The Interactive Web
- Common properties
- Sessions are long-lived
- Must be responsive/ real time
- Must not overburden server
- Communication is bidirectional
- Killer apps
- Games
- Chat
- Finance
5The Interactive Web with HTTP
- Sessions are long-lived
- Must be responsive/real time
- Must not overburden server
- Communication is bidirectional
- This is harder with HTTP
Comet has shown this is possible
6Simulating Bidirectional Communication with HTTP
- Client generated events are easy
- They are simply requests
- AJAX just makes those requests without changing
the page - What about the other direction?
7Sending events from server to client using HTTP
- Polling
- Requests at regular intervals that complete
immediately - Long Polling
- Requests that wait for the next event, then
restart - Server-push (Comet)?
- Socket held open with streaming updates from the
server
8Techniques compared
9Server-Push (Comet)?
- Current hot technology
- Implementations
- Resin
- Grizzly (Glassfish)?
- Jetty
- Tomcat
- All solve the problem of threads dedicated to a
socket - All have a different programming model
10The problem of Bidirectional Communication with
HTTP
- Different techniques for send and receive
- Use AJAX to send data from client
- Use Comet to receive data on client
- Two connections required
- Places limitations on TCP that were necessary for
scalability in the past - A necessary evil at the moment
11Truly Interactive Communication
- Must be capable of long-lived connections
- Must be responsive/real time
- Must not overburden server
- Must be bidirectional
- Must have a simple, coherent API/architecture
12Creating the architecture
- Start with the communication patterns
- Messages
- Request/response
- Truly bidirectional communication
- Client - Server
- Server - Client
- Both must be supported in both patterns
13Creating the architecture
- Representation of entities
- Agents
- Bidirectional communication implies that clients
are first class citizens - Agents represent both clients and servers
- A broker manages communication between agents
14Brokered Agent Messaging (BAM)?
- Broker
- Handles communication between
agents - It's not CORBA
- Agents
- Represent both clients and services
- Messaging
- Messages
- Request/response (asynchronous)?
15Example Sudoku
16Logging In
Resin
Client 1
Login Query
Client Agent 1
Broker
Client Agent 2
Client 2
Login Query
Sudoku Service
17Starting a game
Resin
Avatar Agent 1
Client 1
Client Agent 1
Start Query
Broker
Game 1
Avatar Agent 2
Client Agent 2
Client 2
Start Query
Sudoku Service
Wait Result
Start Result
Start Message
18Making a Move
Resin
Avatar Agent 1
Client 1
Client Agent 1
Move Query
Broker
Move Message
Move Result
Game 1
Avatar Agent 2
Client Agent 2
Client 2
Sudoku Service
19Ending the Game
Resin
Avatar Agent 1
Client 1
Client Agent 1
Move Query
Broker
Move Message
Move Result
Game over Message
Game over Message
Game 1
Avatar Agent 2
Client Agent 2
Client 2
Sudoku Service
20Design notes
- Agents can be long-lived
- SudokuService
- Client
- Agents can be short-lived
- SudokuAvatar
- Agents are lightweight and dynamic
- Non-agents can interact with the system
- SudokuGame
21Code sample SudokuAvatar
- public boolean sendQuerySet(long id,
-
String to, String from, -
Serializable value)? -
- if (value instanceof MoveQuery)
- MoveQuery query (MoveQuery) value
- MoveResult result _game.move(query,
getJid()) - _broker.sendQueryResult(id, from, to,
result) - return true
- ...
22BAM API
- void sendMessage(String to,
String from,
Serializable value)? - boolean sendQueryGet(long id,
String to,
String from,
Serializable query)? - boolean sendQuerySet(long id,
String to,
String from,
Serializable query)?
23Address space
- Agent names look like email addresses
- sudoku_at_caucho.com/3
- First component service name (sudoku)?
- Second component domain (caucho.com)?
- Third component instance identifier (/3)?
- Address structure reflects lightweight nature of
agents
24Hessian Message Transfer Protocol(HMTP)?
- Wire protocol on which BAM is based
- Uses Hessian for compact serialization
- Evolved from XMPP (Jabber)?
25Target platforms
- Flash/Flex
- Silverlight
- JavaFX
- Java Applets
- Comet (interim)?
- Java
- Quercus (PHP)?
- .NET
26Conclusion
- Interactive applications will become more common
- HTTP is not sufficient to handle them
- BAM outlines a new architecture and API to make
the development of these applications easier
27What's next?
- Technical
- Convenience functions
- Making a PHP page a BAM service
- HMTP standardization
- Promotional
- Game contest
28Thank you!
29More information
- http//hessian.caucho.com/
- http//blog.caucho.com /
30Appendix Bridging BAM and Comet
- Initial Comet request creates agent
- Agent triggers event to client on messages
- On AJAX requests, pull agent name from session