Re: [twsocket] TWSocket Digest, Vol 234, Issue 6

2007-08-26 Thread Hoby Smith
Thanks Francois.  I will try to see if I can figure out why my client tester
isn't processing messages and remove the ProcessMessages call.  I agree,
this is obviously a symptom of the underlying problem.

However, TWSocketServer does not have what I need for these tests.  I am not
wanting to know concurrent or contiguous client connections.  If I was, then
yes, ClientCount would be sufficient.  Rather, I am trying to determine how
many connection lifecycles can occur over a period of time.  This includes
connect, build session (TWSOcketServer) and disconnect.

This is not something that TWSocketServer will tell me.  Ergo, my test is
designed to determine this.

Thanks much... :)  Hoby

-Original Message-
Date: Sat, 25 Aug 2007 18:53:49 +0200
From: Francois PIETTE [EMAIL PROTECTED]
Subject: Re: [twsocket] Problems writing tester with connection counts
To: ICS support mailing twsocket@elists.org
Message-ID: [EMAIL PROTECTED]
Content-Type: text/plain; format=flowed; charset=iso-8859-1;
reply-type=original

 2. Even though I use local messages to start and stop the connections, the
 Client application will not process any other messages unless I call
 Application.Processmessages, which I call in the OnSessionConnected event.

That is probably your problem. NEVER call ProcessMessages or any other form
of the message pump from an event handler. You'll have events re-entered and
this is generally very bad (even with a simple TButton !).

btw: Use TWSocketServer for your server program. It already has most of what
you need, for example ClientCount.

--
[EMAIL PROTECTED]
The author of the freeware multi-tier middleware MidWare
The author of the freeware Internet Component Suite (ICS)
http://www.overbyte.be

-- 
To unsubscribe or change your settings for TWSocket mailing list
please goto http://www.elists.org/mailman/listinfo/twsocket
Visit our website at http://www.overbyte.be


Re: [twsocket] Problems writing tester with connection counts

2007-08-26 Thread Francois PIETTE
 However, TWSocketServer does not have what I need for these tests.  I am 
 not
 wanting to know concurrent or contiguous client connections.  If I was, 
 then
 yes, ClientCount would be sufficient.  Rather, I am trying to determine 
 how
 many connection lifecycles can occur over a period of time.  This includes
 connect, build session (TWSOcketServer) and disconnect.

As I understand, you are using a single connection to evaluate the time. 
This will give a different time tahn if you used several parrallel 
connections. You must be aware of that. This is because of low level TCP/IP 
protocol negociation which can take place in parallel for several 
connections. So having many simultaneous connections result in an overall 
better result.

Setting up a TCP connection and gracefully closing a TCP connection are 
processes which involve several packets to be exchanged between client and 
server. There is a round trip time depending on the hardware and network you 
have. This is why having simultaneous connections will result in a better 
global result. Depending on a lot of factors, establishing 10 or 100 
simultaneous connections mays take the same time as establishing only one. 
Same for graceful close.

What you do in your code between OnClientConnected and the graceful close, 
and how you do it will drastically change the results. Fully understanding 
how Windows handle messages will help interpreting the results. And if you 
use simultaneous connections, using a thread for the processing of each 
connection could change the numbers a lot (In both directions !).

 This is not something that TWSocketServer will tell me.  Ergo, my test is
 designed to determine this.

Yes, TWSocketServer will tell you exactly the same thing as what you could 
reinvent. TWSocketServer /is/ a TWSocket and instanciate a new TWSocket for 
each incomming connection. You can tell TWSocketServer to use your own 
TWSocket derived class. You do as you like, but believe me, you are 
reinventing the wheel.


--
[EMAIL PROTECTED]
The author of the freeware multi-tier middleware MidWare
The author of the freeware Internet Component Suite (ICS)
http://www.overbyte.be
-- 
To unsubscribe or change your settings for TWSocket mailing list
please goto http://www.elists.org/mailman/listinfo/twsocket
Visit our website at http://www.overbyte.be


Re: [twsocket] Problems writing tester with connection counts

2007-08-26 Thread Fastream Technologies
One additional note from me: If you use single ICS worker thread for the 
server, then you won't be able to utilize multiple CPU-cores. That's the 
same for client as well. To see how we cope with this problem on the client 
side, see the source of my WebStressTester at 
http://www.fastream.com/ics/Web%20Stress%20Tester%20SRC.zip

It's in BCB2006.

Best Regards,

SZ

- Original Message - 
From: Francois PIETTE [EMAIL PROTECTED]
To: ICS support mailing twsocket@elists.org
Sent: Sunday, August 26, 2007 3:49 PM
Subject: Re: [twsocket] Problems writing tester with connection counts


 However, TWSocketServer does not have what I need for these tests.  I am
 not
 wanting to know concurrent or contiguous client connections.  If I was,
 then
 yes, ClientCount would be sufficient.  Rather, I am trying to determine
 how
 many connection lifecycles can occur over a period of time.  This 
 includes
 connect, build session (TWSOcketServer) and disconnect.

 As I understand, you are using a single connection to evaluate the time.
 This will give a different time tahn if you used several parrallel
 connections. You must be aware of that. This is because of low level 
 TCP/IP
 protocol negociation which can take place in parallel for several
 connections. So having many simultaneous connections result in an overall
 better result.

 Setting up a TCP connection and gracefully closing a TCP connection are
 processes which involve several packets to be exchanged between client and
 server. There is a round trip time depending on the hardware and network 
 you
 have. This is why having simultaneous connections will result in a better
 global result. Depending on a lot of factors, establishing 10 or 100
 simultaneous connections mays take the same time as establishing only one.
 Same for graceful close.

 What you do in your code between OnClientConnected and the graceful close,
 and how you do it will drastically change the results. Fully understanding
 how Windows handle messages will help interpreting the results. And if you
 use simultaneous connections, using a thread for the processing of each
 connection could change the numbers a lot (In both directions !).

 This is not something that TWSocketServer will tell me.  Ergo, my test is
 designed to determine this.

 Yes, TWSocketServer will tell you exactly the same thing as what you could
 reinvent. TWSocketServer /is/ a TWSocket and instanciate a new TWSocket 
 for
 each incomming connection. You can tell TWSocketServer to use your own
 TWSocket derived class. You do as you like, but believe me, you are
 reinventing the wheel.


 --
 [EMAIL PROTECTED]
 The author of the freeware multi-tier middleware MidWare
 The author of the freeware Internet Component Suite (ICS)
 http://www.overbyte.be
 -- 
 To unsubscribe or change your settings for TWSocket mailing list
 please goto http://www.elists.org/mailman/listinfo/twsocket
 Visit our website at http://www.overbyte.be 

-- 
To unsubscribe or change your settings for TWSocket mailing list
please goto http://www.elists.org/mailman/listinfo/twsocket
Visit our website at http://www.overbyte.be


Re: [twsocket] Problems writing tester with connection counts

2007-08-26 Thread Hoby Smith
Hello, again, Francois.  Thanks for the additional input.  Please forgive
me, I don't mean to be pesty, but I am confused by how I could be
reinventing the wheel?!?!

Obviously, the challenge with exchanging information via this email format
is that I am quite limited as to the scope of detail I can provide.  I think
the confusion is that I am trying to explain what I am doing in an
abbreviated form, which makes it hard to communicate the actual details of
the issue.

Let me clarify a few things:

 As I understand, you are using a single connection to evaluate the time.
Actually, the client tester is designed to be run simultaneously on multiple
machines, as well as multiple instances on one machine.  Yes, this version
is single threaded itself and uses one connection.  But, obviously,
aggregating concurrent connections for a more appropriate result is the
goal.  I am simply using one single client as a base testing core, but am
able to run multiple clients concurrently.  This allows me to see the actual
and effective performance points in response to seperate client streams on
the same CPU, different host, etc.  Additionally, just to make sure I am
clear, I am not evaluating the time, but rather various types of
lifecycles over a period of time.

 What you do in your code between OnClientConnected and the graceful close,
 and how you do it will drastically change the results. Fully understanding
 how Windows handle messages will help interpreting the results.
Therein lies the rub.  I do get how messages work in Windows; I have been
coding in them back to the Borland C++ OWL framework.  That is why I was
confused as to why the TWSocket internal messages would own the app's thread
manager like it is in my tester, especially when I am not calling
ProcessMessages.  The test code uses out-of-line messages to prevent this
very problem.  Inserting ProcessMessages is not a fix, but a test of the
symptom.  My lack of understanding lies in the TWSocket internals, not in
Windows messaging, albeit I imagine that I do not have the grasp of it that
you do... :)

 And if you use simultaneous connections, using a thread for the processing
of each
 connection could change the numbers a lot (In both directions !)
I agree.  The server is built in two modes: One uses a managed thread pool
for packet handling, the other uses a single threaded packet handler.  By
packet, I mean my transport packetizing entities, not IP units.
Additionally, the client can be built in either of these two modes as well.
These will allow me to compare threaded vs. inline processing. When I ran
into this problem, I built both as single threaded handlers, so that I can
remove the threading logic from the equation.

 You do as you like, but believe me, you are reinventing the wheel.
The ClientCount property that you are referring to simply returns the number
of concurrent connections and has no cummulative bearing over time.  I am
confused by your recommendation to use the ClientCount property to determine
any of the metrics I am looking for.  Perhaps, I am greatly confused, which
I guess is possible.  But, given your component pattern, I do not see the
relevance of this property for my test.

I have been building TCP/IP apps for quite a number of years, as well as
using your great components for years as well, so I don't think I am a
complete newbie.  However, I definitely do not want to reinvent the wheel,
but I was simply stumped by the simplicity of what I was doing and why I was
having a problem with it.  I am sure the problem lies in my code, not ICS.

Anyway, thanks for the input.  Perhaps this explains what I am doing more
clearly.  I did not mean to take so much of your time or generate so many
emails.  I was hoping there was a quick, short, illuminating answer to my
delimma.  I will figure this out.

Thanks... Hoby

-Original Message-
From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]
Behalf Of Francois PIETTE
Sent: Sunday, August 26, 2007 7:49 AM
To: ICS support mailing
Subject: Re: [twsocket] Problems writing tester with connection counts


 However, TWSocketServer does not have what I need for these tests.  I am
 not
 wanting to know concurrent or contiguous client connections.  If I was,
 then
 yes, ClientCount would be sufficient.  Rather, I am trying to determine
 how
 many connection lifecycles can occur over a period of time.  This includes
 connect, build session (TWSOcketServer) and disconnect.

As I understand, you are using a single connection to evaluate the time.
This will give a different time tahn if you used several parrallel
connections. You must be aware of that. This is because of low level TCP/IP
protocol negociation which can take place in parallel for several
connections. So having many simultaneous connections result in an overall
better result.

Setting up a TCP connection and gracefully closing a TCP connection are
processes which involve several packets to be exchanged between client and
server. There is a 

Re: [twsocket] Problems writing tester with connection counts

2007-08-26 Thread Hoby Smith
Thanks much.  I will look through it.

-Original Message-
From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]
Behalf Of Fastream Technologies
Sent: Sunday, August 26, 2007 7:54 AM
To: ICS support mailing
Subject: Re: [twsocket] Problems writing tester with connection counts


One additional note from me: If you use single ICS worker thread for the
server, then you won't be able to utilize multiple CPU-cores. That's the
same for client as well. To see how we cope with this problem on the client
side, see the source of my WebStressTester at
http://www.fastream.com/ics/Web%20Stress%20Tester%20SRC.zip

It's in BCB2006.

Best Regards,

SZ

-- 
To unsubscribe or change your settings for TWSocket mailing list
please goto http://www.elists.org/mailman/listinfo/twsocket
Visit our website at http://www.overbyte.be