Figure 6-2 shows the results of a test conducted for a medium result set of 5,000 records
using out-of-the-box implementations of the technologies with standard GZip
compression.
Figure 6-2. James Ward’s benchmark site
Visit this website and run some tests on your own. The numbers become even more
favorable toward AMF if you run these tests on slow networks and low-end client
computers.
The other interesting way to look at performance is to consider what happens to the
data when it finally arrives at the client. Because HTTP and SOAP are text-based pro-
tocols, they include a parsing phase, which is pretty expensive in terms of time. The
RIA needs to operate with native data types, such as numbers, dates, and Booleans.
Think about the volume of data conversion that has to be made on the client after the
arrival of 5,000 1 KB records.
Steve Souders, a Yahoo! expert in performance tuning of traditional (DHTML) web-
sites, stresses that major improvements can be achieved by minimizing the amount of
data processing performed on the client in an HTML page; see High Performance Web
Sites by Steve Souders (O’Reilly). Using the AMF protocol allows you to substantially
lower the need for such processing, because the data arrives at the client already strongly
typed.
Why Is AMF Important? ? | | 267
Conversion of pdf to jpg - Convert PDF to JPEG images in C#.net, ASP.NET MVC, WinForms, WPF project
How to convert PDF to JPEG using C#.NET PDF to JPEG conversion / converter library control SDK
convert pdf image to jpg image; best program to convert pdf to jpg
Conversion of pdf to jpg - VB.NET PDF Convert to Jpeg SDK: Convert PDF to JPEG images in vb.net, ASP.NET MVC, WinForms, WPF project
Online Tutorial for PDF to JPEG (JPG) Conversion in VB.NET Image Application
best way to convert pdf to jpg; batch pdf to jpg
AMF and Client-Side Serialization
AMF is crucial for all types of serialization and communications. All native data seri-
alization is customarily handled by the class 
ByteArray
. When serialized, the data type
information is marked out by the name included in the metadata tag 
RemoteClass
.
Example 6-1 is a small example from the Flash Builder’s NetworkingSamples project
that comes with the book. It includes an application RegisteredClassvsUnregis-
tered.mxml and two classes: 
RegisteredClass
and 
Unregistered
.
Example 6-1. Serialization with and without the RemoteObject meta tag
package
{
[RemoteClass(alias="com.RegisteredClass")]
public class RegisteredClass{
}
}
package
{
public class UnregisteredClass{
}
}
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
creationComplete="test()">
<mx:Script>
<![CDATA[
import flash.utils.ByteArray
private function serializeDeserialize(a:Object) : void {
var ba : ByteArray = new ByteArray();
ba.writeObject(a);
ba.position = 0;
var aa:Object = ba.readObject();
trace( aa );
}
private function test():void {
serializeDeserialize( new RegisteredClass());
serializeDeserialize( new UnregisteredClass());
}
]]>
</mx:Script>
</mx:Application>
In Example 6-1, the function 
serializeDeserialize()
serializes the object passed as an
argument into a 
ByteArray
, and then reads it back into a variable 
aa
of type 
Object
. The
application makes two calls to this function. During the first call, it passes an object
that contains the metadata tag, marking the object with a data type 
RegisteredClass
;
268 | | Chapter 6: Open Source Networking Solutions
Online Convert Jpeg to PDF file. Best free online export Jpg image
start immediately to sort the files, try out some settings and then create the PDF files with the button at the bottom. The perfect conversion tool. JPG is the
batch pdf to jpg converter online; change pdf to jpg format
Online Convert PDF to Jpeg images. Best free online PDF JPEG
takes a few seconds. Web Security. Your PDF and JPG files will be deleted from our servers an hour after the conversion. No-one has
convert multi page pdf to single jpg; convert pdf pages to jpg
the second call passes the object that does not use this metadata tag. Running this
program through a debugger displays the following output in the console:
[SWF] /NetworkingSamples/NetworkingSamples.swf -
798,429 bytes after decompression
[object RegisteredClass]
[object Object]
Annotating a class with the 
RemoteClass
metadata tag allows Flash Player to store, send,
and restore information in the predictable, strongly typed format. If you need to persist
this class, say in AIR disconnected mode, or communicate with another .swf locally via
the class 
LocalConnection
, following the rules of AMF communications is crucial. In
the example, 
RemoteClass
ensures that during serialization, the information about the
class will be preserved.
HTTP Connection Management
To really appreciate the advantages of binary data transfers and a persistent connection
to the server, take a step back and consider how web browsers in traditional web ap-
plications connect to servers.
For years, web browsers would allow only two connections per domain. Because Flash
Player uses the browser’s connection for running HTTP requests to the server, it shares
the same limitations as all browser-based applications.
The latest versions of Internet Explorer (IE) and Mozilla Firefox increased the default
number of simultaneous parallel HTTP requests per domain/window from two to six.
It’s probably the biggest news in the AJAX world in the last three years. For the current
crop of AJAX sites serving real WAN connections it means increasing the load speed
and fewer timeouts/reliability issues. By the way, most of the Opera and Safari per-
formance gains over IE and Firefox in the past are attributed to the fact that they allowed
and used four connections, ignoring the recommendations of the W3C (which sug-
gested allowing only two connections).
The fact that increasing the number of parallel connections increases network through-
put is easy to understand. Today’s request/response approach for browser communi-
cations is very similar to the village bike concept. Imagine that there are only a couple
of bikes that serve the entire village. People ride a bike and come back to give it to the
next person in line. People wait for their turns, keeping their fingers crossed that the
person in front of them won’t get lost in the woods during her ride. If that happens,
they need to wait till all hope is gone (i.e., timeout) and the village authorities provide
them with a new bike circa 1996.
Pretty often, by the time the new bike arrives it’s too late: the person decided to get
engaged in a different activity (abandon this site). As the travel destinations become
more distant (WAN), people are exposed to real-world troubles of commuting—
latency (500 ms for a geostatic satellite network), bandwidth limitations, jitter (errors),
HTTP Connection Management t | | 269
C# Image Convert: How to Convert Adobe PDF to Jpeg, Png, Bmp, &
C# sample code for PDF to jpg image conversion. This demo code convert PDF file all pages to jpg images. C# sample code for PDF to jpg image conversion.
convert .pdf to .jpg; convert pdf to jpeg on
C# Image Convert: How to Convert Dicom Image File to Raster Images
RasterEdge.XDoc.PDF.dll. Conversion from Dicom to Jpeg Image. String inputFilePath = @"C:\input.dcm"; String outputFilePath = @"C:\output.jpg"; // Convert dicom
change file from pdf to jpg on; convert pdf to jpeg
unrecoverable losses, etc. Besides that, the users may experience congestion caused by
the fact that your ISP decided to make some extra cash by trying to become a TV
broadcaster and a Voice over Internet Protocol (VoIP) company but lacks the required
infrastructure. The applications that worked perfectly on local/fast networks will
crumble in every imaginable way.
Obviously, more bikes (browser connections) mean that with some traffic planning
you can offer a lot more fun to the bikers (get much better performance and reliability).
You might even allocate one bike to a sheriff/firefighter/village doctor so he will provide
information on conditions and lost/damaged goods carried by the bikers. You can route
important goods in parallel so they will not get lost or damaged that easily.
You can really start utilizing the long-running connection for real data push now. But
first, let’s go back 10 years and try to figure out how the early adopters of RIAs devel-
oped with AJAX survived.
Even though AJAX as a term was coined only in 2005, the authors of
this book started using the DHTML/
XMLHttpRequest
combo (currently
known as AJAX) in the year 2000.
The Hack to Increase a Web Browser’s Performance
In the beginning of this century, most of the enterprises we worked with quietly rolled
out browser builds/service packs increasing the number of allowed HTTP connections.
This was just a hack. For Internet Explorer, the following changes to Windows registry
keys would increase the number of the browser connections to 10:
MaxConnectionsPer1_0Server    10
MaxConnectionsPerServer       10
With Mozilla’s Firefox, you has to recompile the source code of the entire browser.
The hack does solve most of the performance and reliability issues for a short while.
The main reason is that without imposed limits, software increases in size faster than
transistor capacity under Moore’s Law. And unlike in private networks in enterprises,
without a proper “city framework,” rampant requests will cause an overall Internet
meltdown as the initial rollout of more capable browsers gives them an unfair advantage
in terms of bandwidth share.
If a server receives eight connection requests, it’ll try to allocate the limited available
bandwidth accordingly, and, for instance, Firefox’s requests will enjoy better through-
put than those of Internet Explorer, which on older and slower networks will cause
quality of service (QoS) problems. In other words, this solution has a very real potential
to cause more of the same problems it’s expected to solve.
270 | | Chapter 6: Open Source Networking Solutions
JPEG to PDF Converter | Convert JPEG to PDF, Convert PDF to JPEG
similar software; Support a batch conversion of JPG to PDF with amazingly high speed; Get a compressed PDF file after conversion; Support
changing pdf file to jpg; changing file from pdf to jpg
JPG to DICOM Converter | Convert JPEG to DICOM, Convert DICOM to
Open JPEG to DICOM Converter first; Load JPG images from local folders in "File" in toolbar Windows Explorer; Select "Batch Conversion" & Choose "DICOM" in
convert multiple page pdf to jpg; reader convert pdf to jpg
Other Ways of Increasing a Web Browser’s Performance
Most enterprises have to control QoS of their clients’ communications. For example,
a company that trades stock has a service level agreement (SLA) with their clients
promising to push the new price quotes twice a second. To keep such a promise, the
enterprise should create and adopt a number of point-to-point solutions that provide
more efficient communication models, which fall into three categories:
HTTP batching and streaming of multiple requests in a single HTTP call and Comet
communications
Comet, a.k.a. reverse AJAX, allows the web server to push data to the web browser,
as opposed to a traditional request/response model. AMF performs automatic
batching of the requests. If your program executes a loop that generates 50 HTTP
requests to the server, AMF will batch them and will send them as one HTTP
request.
Imagine that someone wrote a loop in JavaScript that makes an
HTTP server request on each iteration. The browser can batch
these requests and send, say, 10 requests at a time. This is HTTP
batching. In this scenario, the browser would assign a message ID
to each request included in the batch, and arriving responses would
contain correlation IDs that would allow the browser to find the
matching requestors.
Binary components that work with two-directional sockets
This is the case used in multimedia streaming, where there are two separate chan-
nels, and each is used for sending data in one direction: either to or from the server.
Pluggable protocols, which are wrappers for standard protocols
Say you can develop some custom protocol called HTTPZ, which for the browsers
will look like HTTP, but under the hood will use streaming or even a socket-based
protocol like RTMP. The browser “believes” that it uses HTTP, the web server
receives RTMP, and the translation is done by HTTPZ—every party is happy.
The pluggable protocol option did not become popular, even though it allows moving
most of the problems from the browser to the OS level. The batching and streaming
options, however, did.
Regular HTTP is based on the request/response model, which has an overhead of es-
tablishing a connection (and consequently disconnecting) on each request. In the case
of streaming, this connection is opened only once (for more information, see the section
“Putting Streaming to Work” on page 274).
HTTP batching and streaming is a combination of a few technologies with a close
resemblance to how car traffic is controlled on some highways. There are dedicated
lanes for high-occupancy vehicles (HOVs) that move faster during the rush hours. Such
HTTP Connection Management t | | 271
JPG to GIF Converter | Convert JPEG to GIF, Convert GIF to JPG
Open JPEG to GIF Converter first; Load JPG images from local folders in "File" in toolbar Windows Explorer; Select "Batch Conversion" & Choose "GIF" in "Output
convert pdf file to jpg format; reader pdf to jpeg
JPG to PNG Converter | Convert JPEG to PNG, Convert PNG to JPG
Open JPEG to PNG Converter first; Load JPG images from local folders in "File" in toolbar Windows Explorer; Select "Batch Conversion" & Choose "PNG" in "Output
changing pdf to jpg on; convert pdf pictures to jpg
HOV lanes can be compared to the HTTP channels opened for streaming. For example,
you can program network communications in such a way that one channel allows only
two data pushes per second (a guaranteed QoS), while the other channel will try to
push all the data, which may cause network congestion, delays, and queuing.
As an example, the Flex/Flash AMF protocol tries to squeeze out every bit of bandwidth
and optimize queuing of the requests in the most efficient way—both on client and
server. As a result, your application uses the maximum bandwidth, and request queues
are short.
The results of such batching were so good that at Farata Systems, we started recom-
mending AMF to most of our customers (even those that have to use 
WebService
or
HTTPService
objects for communication). Using AMF to proxy requests via an AMF-
enabled server delivers results from the HTTP servers more efficiently.
If a client request uses a specific destination on a proxy server, this des-
tination can be configured to use an AMF channel, even if an
HTTPService
object has been used as a means of communications.
With AMF, the data gets loaded faster than with nonbatched requests/responses. And
it plays nicely with the typical infrastructures that use firewalls as it piggybacks on the
existing browser HTTP requests.
However, for critical applications built on plain infrastructures a problem remains:
there is no QoS provided by the HTTP protocol, which may become a showstopper.
For example, think of a financial application that sends real-time price quotes to its
users. The server keeps sending messages, regardless of the current throughput of the
network, which in the case of network congestion will be causing problems with queue
overruns or lost packages.
Binary always on (re)connected socket protocols are a more logical and efficient solu-
tion. Unlike the request/response model, a typical socket connection is like a two-way
highway, with data moving in opposite directions independently. But before we fully
depart into the Communications 2.0 world, let’s make sure that you understand how
HTTP is shaping up these days.
The disconnected model of HTTP 1.0 was not practical. The overhead of connecting/
disconnecting for each request was not tolerable, and for the last eight years we have
not seen a single web browser using it. It has been completely replaced by HTTP 1.1—
the protocol that keeps connections open beyond request/response so the next com-
munications with the server happen faster. Under the hood, there are two-way sockets
that stay open—but browsers diligently follow the old model. They don’t create
bidirectional pipe-like connections, as in 
flash.net.NetConnection
.
As web browsers started to host business applications, the need to process the real-time
data forced people to look into solutions better than polling, and a few server-side push
272 | | Chapter 6: Open Source Networking Solutions
solutions were discovered. Although there were differences in implementations, the
main theme remained the same—the server would get requests and hold them for a
long time, flushing packages down when it became available.
The packages would reach the browser to be interpreted either by programs upon ar-
rival or executed in the iFrame (if packaged as 
<script/>
sections of DHTML). The
important part was that people started to see that a server-driven model was valid, and
that it was a better fit for some applications. The servers started controlling the clients.
Currently, there are two approaches to breaking the request/response paradigm: the
Comet model and the model offered by the creators of the Jetty application server.
When we started writing this book, the draft of the Java Servlet 3.0
specification (JSR-315) was based on asynchronous servlets implemen-
ted in the Jetty Servlet container. Then, the public review of JSR-315
was drastically changed. You can read more on the subject in the post
titled “JSR-315: JSP Failings.”
What Is Comet?
A number of open source and commercial implementations of Comet exist in Java and
Python. They can be very different, capitalizing on nonblocking I/O, using optimized
threads, or offering more efficient native sockets support.
A servlet container in Jetty works in a half-duplex mode: it opens a dedicated streaming
connection for flushing the data to the client, but also allows request/responses.
The Comet model is a full duplex that uses a two-way socket implementation (like in
Apache Tomcat), which extends a conventional request/response model with events
that are being sent on an established HTTP connection.
With Comet, the idea is that the server provides a second model for the requests handler
in addition to the conventional one. There is a dedicated open connection that receives
events related to the requests. If you run a Java servlet, it will receive additional events
from the server: 
connect
read
error
, and 
disconnect
:
connect
and 
disconnect
Define the life span of the connection object available for communications.
error
Notifies the servlet of the low-level errors in the transmission protocol.
read
Dispatched when there is a request coming from the client; allows the server to
read and process it. The server keeps connection and response objects and writes
(flushes) the information to the client as needed.
HTTP Connection Management t | | 273
Adding an event model to the server side brings symmetry to the client/server pro-
gramming model and greatly simplifies the asynchronous programming. Unfortu-
nately, existing implementations of this model are not overly reliable.
If you want to use the two-way socket model, you will need to write
some custom code using the Flash 
NetConnection
object to stream the
data from the client to the server, too.
Consider how this model is different for fine-grained requests common in today’s AJAX
applications. Imagine that you’re in a coffee shop with a lousy WiFi connection sporting
1-second latency for a typical eBay response implemented as a web device, watching
30 items.
With the current browser settings (two connections per domain), it would take you 15
seconds to refresh all 30 items. With six allowed browser connections, this time is
reduced to five seconds, but will require a more powerful infrastructure on the server
side.
With the Comet-type requests, you can send all 30 requests without waiting for a single
response (the same will be done with AMF HTTP batching) and will receive all 30
responses asynchronously. Meanwhile, with HTTP batching, you would get all 30 re-
sponses at once, and need some kind of sorting adapters on both sides to distribute
batch members to the proper responders.
Putting Streaming to Work
Imagine a small village by the river. There is one boat, and whoever needs to go to the
other bank to buy some food takes this boat. No one in the village can go to the other
bank until the boat’s back. This is in some sense similar to the HTTP request/response
model of communication.
At some point, people who lived in the same village built a two-lane bridge over this
river. Each lane allows walking in one direction. All of a sudden you see that lots of
people are moving in both directions at the same time. The number of trips to the other
riverbank is a lot higher now. Yes, people carrying the shopping bags may go slower,
but they are all moving at the same time. And each trip is faster, too; there is no need
to embark/disembark from the boat (connect/disconnect). This is streaming.
RTMP implementation offers two-lane traffic (a two-directional socket)
and is a lot more efficient than the request/response model. Each con-
nected computer just sends the data in one direction to a dedicated
socket, which allows you to measure and estimate delivery metrics in
each direction. RTMP is an open protocol available at http://www.adobe
.com/devnet/rtmp/.
274 | | Chapter 6: Open Source Networking Solutions
In multimedia applications, having an uninterrupted data delivery is a must, and the
request/response model doesn’t work here. When you go to http://www.youtube.com,
you expect to start watching the video immediately, without waiting until the entire
file is downloaded to the client. And after seeing the first frames of the video, you’d like
to have the rest in a smooth, uninterrupted mode, and this type of playback is supported
by buffering of the stream data.
Integrating Multimedia Solutions
For a long time, Flash Player was the de facto standard tool in delivering multimedia—
especially video. These capabilities are based on its 
NetConnection
object and are em-
bedded in a number of classes, including 
Camera
Microphone
, and 
Video
.
NetConnection
communicates with the server by establishing a full duplex open
connection—the two-way socket—and both the server and the client can initiate the
conversation. This is a far simpler programming model, and provides improved per-
formance for intensive two-way communications.
A standard solution is to separate the media portion into an instance (or a farm) of the
Flash Media Server. However, some applications might have different licensing and
integration requirements. Other alternatives include Red5, an open source server, and
Wowza, a commercial Java media server. The advantages of these drop-in servers is the
transparency in integration of streaming with the other parts of the application.
With the release of Flash 10, new sound capabilities with high-quality voice codecs and
audio capabilities open up a whole new world of human interaction. But the most
important feature driving new types of applications will be based on peer-to-peer (P2P)
support and User Datagram Protocol (UDP) communications built into Flash Player 10.
Unlike traditional web applications, they require very little infrastructure and band-
width as they use clients’ resources. These applications enable VoIP, teleconferencing,
screen sharing, and resource polling of applications on the widest deployment platform.
The users of the business Flex applications want to have the same experience, too. In
this case, the stream consists of the Flex code and the data, so it’s important to make
the right decision about the amount of code that will have to be downloaded to the
user’s computer.
Consider a few types of web applications that benefit from breaking free from a tradi-
tional request/response model:
Applications built on the publish/subscribe model or the server-side push
In this scenario, the data is being sent to the client as soon as it becomes available
on the server. Typical examples of such applications are chat rooms, stock market
data feeds, and delivering videos to users.
Putting Streaming to Work k | | 275
Online transaction processing, analytical applications, and distributed services that need
to extend the request/response model
For example, a call center application has to broadcast the data modifications done
by one clerk to another to ensure that the second doesn’t work on the stale data.
For distributed request/response services, you can’t guarantee the response time,
because the response may sit on the server just because the client has a very limited
set of available connection objects, in which case your application would stall.
Applications that need to force the execution of the code on the client
Some applications benefit from the server-side components being able to directly
call methods on the objects that exist on the client side in Flash Player. Typical
cases are remote support and administration or workflow systems in which the
server needs to force the client to move to a new node of the workflow. BlazeDS
needs to be enhanced to support servers that can call clients.
Figure 6-3 illustrates three use cases of enterprise RIA:
Subscribe and publish
You send the data using BlazeDS and improve the scalability of the application.
You’ll see this demonstrated with the Jetty server scenario in the following section.
Remoting and SOA
A remote object takes care of publishing and subscribing, keeps track of the cor-
relation IDs of the messages received from the clients, and pushes the data to the
clients. In the service-oriented architecture (SOA) world, the data returned by the
service may change over time, and you can’t control it. In this model, you can’t
control the response time, either. SOA is a good use case for introducing data push
to a rich client.
Remote control
You need to push the software or data updates to the client.
Figure 6-3. Use cases for streaming
276 | | Chapter 6: Open Source Networking Solutions
Documents you may be interested
Documents you may be interested