<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Push Framework</title>
	<atom:link href="http://www.pushframework.com/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://www.pushframework.com</link>
	<description>C++ toolkit for high performance servers development</description>
	<lastBuildDate>Wed, 16 Jan 2013 13:43:22 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>Windows service deployment form</title>
		<link>http://www.pushframework.com/?p=287</link>
		<comments>http://www.pushframework.com/?p=287#comments</comments>
		<pubDate>Sun, 04 Jul 2010 00:03:20 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Support Articles and white papers]]></category>

		<guid isPermaLink="false">http://www.pushframework.com/?p=287</guid>
		<description><![CDATA[It is trivial to deploy any Push Framework based server in form of a Windows service. The Server class provides the following methods : ::start ::pause ::resume and ::stop. When writing a code that interacts with the SCM you usually provide 4 entry points that correspond to the 4 possible actions : start, stop, resume [...]]]></description>
				<content:encoded><![CDATA[<p>It is trivial to deploy any Push Framework based server in form of a Windows service.</p>
<p>The Server class provides the following methods :</p>
<p>::start</p>
<p>::pause</p>
<p>::resume</p>
<p>and</p>
<p>::stop.</p>
<p>When writing a code that interacts with the SCM you usually provide 4 entry points that correspond to the 4 possible actions : start, stop, resume and pause.</p>
<p>When wrapping the ::stat method in an entry point function, makje sure to use the blocking version ie setthe startInSeparateThread parameter to false.</p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.pushframework.com%2F%3Fp%3D287&amp;title=Windows%20service%20deployment%20form" id="wpa2a_2"><img src="http://www.pushframework.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.pushframework.com/?feed=rss2&#038;p=287</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dashboard and server compatibilty</title>
		<link>http://www.pushframework.com/?p=283</link>
		<comments>http://www.pushframework.com/?p=283#comments</comments>
		<pubDate>Sat, 03 Jul 2010 23:53:24 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Support Articles and white papers]]></category>

		<guid isPermaLink="false">http://www.pushframework.com/?p=283</guid>
		<description><![CDATA[The Dashboard and Push Framework use a specific protocol to exchange information. The two program do evolve dependently/independently. Sometimes, changes mean that past Dashboard versions can not talk to new Push Framework versions. The opposite is also true. A rule has been made to make the Dashboard depend on Push Framework onward. When the Dashboard [...]]]></description>
				<content:encoded><![CDATA[<p>The Dashboard and Push Framework use a specific protocol to exchange information. The two program do evolve dependently/independently.</p>
<p>Sometimes, changes mean that past Dashboard versions can not talk to new Push Framework versions. The opposite is also true.</p>
<p>A rule has been made to make the Dashboard depend on Push Framework onward.</p>
<p>When the Dashboard connects, it send a request containing the supported protocol version. Your Push Framework-based server reads the version and makes the decision on whether this is supported or not. In the negative, the server refuses the connections and your Dashboard displays a message prompting you to use a newer version of the Dashboard.</p>
<p>The Dashboard recent version i always available in the &#8220;Downloads&#8221; section of the website.</p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.pushframework.com%2F%3Fp%3D283&amp;title=Dashboard%20and%20server%20compatibilty" id="wpa2a_4"><img src="http://www.pushframework.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.pushframework.com/?feed=rss2&#038;p=283</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Using Push Framework in conjunction with a database</title>
		<link>http://www.pushframework.com/?p=281</link>
		<comments>http://www.pushframework.com/?p=281#comments</comments>
		<pubDate>Sat, 03 Jul 2010 23:52:40 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Support Articles and white papers]]></category>

		<guid isPermaLink="false">http://www.pushframework.com/?p=281</guid>
		<description><![CDATA[In many server programs, the use of a backend database server is needed to persist data. If you use Push Framework, you may wonder about the best way how to use database connections and queries operations. We know that for the 90% of cases it is not possible to use one database server connection concurrently [...]]]></description>
				<content:encoded><![CDATA[<p>In many server programs, the use of a backend database server is needed to persist data.</p>
<p>If you use Push Framework, you may wonder about the best way how to use database connections and queries operations.</p>
<p>We know that for the 90% of cases it is not possible to use one database server connection concurrently without conflicts.</p>
<p>Thus one immediate solution would be to initialize a connection for each thread and use it whenever required. This would be possible if Push Framework give you access to &#8220;per workers&#8221; contexts. However the librray does not give you access to the moment when a worker thread is started and when it is accessing the last bit of code before being destructed.</p>
<p>By the way, PushFramework::Service contructors execute on the main thread of your program process.</p>
<p>The best way to manage database connections is to use a shared and safe pool of connections.  You can initialize the pool at server startup and you retrieve borrow anddispose connections in Service::handle without the fear of conflicts that can result from making concurrent queries for a same connection.</p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.pushframework.com%2F%3Fp%3D281&amp;title=Using%20Push%20Framework%20in%20conjunction%20with%20a%20database" id="wpa2a_6"><img src="http://www.pushframework.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.pushframework.com/?feed=rss2&#038;p=281</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Testing the broadcast mechanism in Push Framework</title>
		<link>http://www.pushframework.com/?p=278</link>
		<comments>http://www.pushframework.com/?p=278#comments</comments>
		<pubDate>Sat, 03 Jul 2010 23:51:26 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Support Articles and white papers]]></category>

		<guid isPermaLink="false">http://www.pushframework.com/?p=278</guid>
		<description><![CDATA[To test Broadcast you can follow this intuitive idea : 1. Create a Push Framework based server that initializes a number of broadcasting channel. Choose different values for teh priority and quota number 2. Channel should not require explicit subscription. Design a client program that connects, receives server data and reports statistics , mainly the [...]]]></description>
				<content:encoded><![CDATA[<p>To test Broadcast you can follow this intuitive idea :</p>
<p>1. Create a Push Framework based server that initializes a number of broadcasting channel. Choose different values for teh priority and quota number</p>
<p>2. Channel should not require explicit subscription. Design a client program that connects, receives server data and reports statistics , mainly the percentage of received data in each broadcasting channel.</p>
<p>3. Start your server and launch another thread that makes sure that all broadcasting channels remain full.</p>
<p>4. After a certain duration, stop the client program (not the server to get accurate report). When client connectiuon stopped, values should be displayed before the process ends.</p>
<p>The following rules yield themselves :</p>
<p>1. If you created a channel A and another channel B such that priority(A) &gt; priority(B) then if channels fill rate is &gt; than sending rate, then client will only receive packets belonging to channel A.</p>
<p>2. If you created a channel A and a channel B with a same priority number the if the fill rate of both A and B is &gt; than the sending rate, then we count a number of received packets that is proportional to the channel quota number.</p>
<p><strong>This behavior is explained more on This PDF :</strong></p>
<p>http://www.pushframework.com/wp-content/uploads/2010/12/Data-broadcast-in-Push-Framework.pdf</p>
<p><strong>UPDATE :</strong></p>
<p>This validation idea was implemented in this article : http://www.pushframework.com/?page_id=435</p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.pushframework.com%2F%3Fp%3D278&amp;title=Testing%20the%20broadcast%20mechanism%20in%20Push%20Framework" id="wpa2a_8"><img src="http://www.pushframework.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.pushframework.com/?feed=rss2&#038;p=278</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Multiplateform Push Framework : possibilities and plans</title>
		<link>http://www.pushframework.com/?p=274</link>
		<comments>http://www.pushframework.com/?p=274#comments</comments>
		<pubDate>Sat, 03 Jul 2010 23:48:55 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Support Articles and white papers]]></category>

		<guid isPermaLink="false">http://www.pushframework.com/?p=274</guid>
		<description><![CDATA[Except for the IOCP mechanism available for Windows Server OS, I can&#8217;t recall which code is only dependent on Windows plateform. Porting Push Framework to other OS should never be a big deal. However I am not sure if IOCP is available on all OSs. Considering the lack of time and the very fact that [...]]]></description>
				<content:encoded><![CDATA[<p>Except for the IOCP mechanism available for Windows Server OS, I can&#8217;t recall which code is only dependent on Windows plateform. Porting Push Framework to other OS should never be a big deal.</p>
<p>However I am not sure if IOCP is available on all OSs.</p>
<p>Considering the lack of time and the very fact that unfortunately I never touched other operating systems, I can&#8217;t promise to port myself this library in any time soon.</p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.pushframework.com%2F%3Fp%3D274&amp;title=Multiplateform%20Push%20Framework%20%3A%20possibilities%20and%20plans" id="wpa2a_10"><img src="http://www.pushframework.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.pushframework.com/?feed=rss2&#038;p=274</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Push Framework and concurrent code</title>
		<link>http://www.pushframework.com/?p=270</link>
		<comments>http://www.pushframework.com/?p=270#comments</comments>
		<pubDate>Sat, 03 Jul 2010 23:48:34 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Support Articles and white papers]]></category>

		<guid isPermaLink="false">http://www.pushframework.com/?p=270</guid>
		<description><![CDATA[It is very important to note that Push Framework is a parallel framework. Never make the assumption that Service::handle method can only be executed by a single thread at once. Even for the one Service object, two threads may act on its same ::handle method. The two function used to manipulate client keys/structures : ClientFactory::getClient [...]]]></description>
				<content:encoded><![CDATA[<p>It is very important to note that Push Framework is a parallel framework.</p>
<p>Never make the assumption that Service::handle method can only be executed by a single thread at once. Even for the one Service object, two threads may act on its same ::handle method.</p>
<p>The two function used to manipulate client keys/structures :</p>
<p>ClientFactory::getClient</p>
<p>ClientFactory::returnClient</p>
<p>are not object locks. They merely inc/dec reference counter for each Client object you desire to work with, in order to detect the safe moment of disposal when a Client is disconnected.</p>
<p>Thus there should be no thread contention. Thread contention happens for the very short moments when you try to push data to a same Client object from more than one thread at a same time.</p>
<p>Having said that, it is thus the developer responsibilty to implement synchronization  whenever that is needed for the new data structures that are added to the program code.</p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.pushframework.com%2F%3Fp%3D270&amp;title=Push%20Framework%20and%20concurrent%20code" id="wpa2a_12"><img src="http://www.pushframework.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.pushframework.com/?feed=rss2&#038;p=270</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Building strong authentification mechanism in Push Framework</title>
		<link>http://www.pushframework.com/?p=264</link>
		<comments>http://www.pushframework.com/?p=264#comments</comments>
		<pubDate>Sat, 03 Jul 2010 23:40:31 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Support Articles and white papers]]></category>

		<guid isPermaLink="false">http://www.pushframework.com/?p=264</guid>
		<description><![CDATA[Push Framework was designed by making a concrete separation between &#8220;logged clients&#8221; (PushFramework::Client) and the underlying TCP connections. By default, evry connection request is accepted. However,  the developer get the chance to check if the connection is a legitemate client before allocating resources and attaching the connection to a Client object. First, the developer can [...]]]></description>
				<content:encoded><![CDATA[<p>Push Framework was designed by making a concrete separation between &#8220;logged clients&#8221; (PushFramework::Client) and the underlying TCP connections.</p>
<p>By default, evry connection request is accepted. However,  the developer get the chance to check if the connection is a legitemate client before allocating resources and attaching the connection to a Client object.</p>
<p>First, the developer can force the framework to send an outgoing packet before the receiving of any request. The decision on whether to accept the client can then be made when the first request is received.</p>
<p>The ClientFactory class provides the following virtual methods :</p>
<p>::onNewConnection</p>
<p>::onFirstRequest</p>
<p>Strongest authentification mechanisms can be achieved by devising a dynamic response in ::onNewConnection then expecting a correct answer in the first request received.</p>
<p>Example :</p>
<p>in ::onNewConnection :</p>
<p>generate a random number x.  calculate y=F(x) then save y into the lpContext parameter and send x to the client.</p>
<p>and in ::onFirstRequest:</p>
<p>read the received y&#8217;, pull y from the lpContext parameter and compare the two numbers. If they are equal, accept the client.</p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.pushframework.com%2F%3Fp%3D264&amp;title=Building%20strong%20authentification%20mechanism%20in%20Push%20Framework" id="wpa2a_14"><img src="http://www.pushframework.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.pushframework.com/?feed=rss2&#038;p=264</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
