aburgoyne
asked on
Delphi 2009 TCP communication system
I'm using Delphi 2009 and I'm trying to put together a kind of client and server communication system for product authentication.
Essentially, the server application will sit on a Win 2008 box and wait for clients to announce themselves.
A client sends a serial number which the server looks up in a database.
If the serial number is disabled then the server sends back a "get lost" message and closes the socket connection.
If the serial number is authenticated then the server will communicate with the client as neccessary.
I've tried a few TCP components to test the process but I'm having a similar issue with all of them - the number of concurrent connections is not sufficient.
For each "server", I've built a client capable of initiating multiple connections. When testing locally (server and client using 127.0.0.1), the best I've managed is about 30,000 connections but testing between two Win 2003 servers in a datacenter is giving much worse results - about 5,000 connections before I start getting drop outs.
I believe that Win 2003 / 2008 should be able to support around 100,000 connections so I'm at a loss as to why I'm seeing such low numbers in testing.
If anyone has any suggestions or, better still, some example code to get beyond the limits I'm experiencing then that would would be awesome.
Thx, Adam
Essentially, the server application will sit on a Win 2008 box and wait for clients to announce themselves.
A client sends a serial number which the server looks up in a database.
If the serial number is disabled then the server sends back a "get lost" message and closes the socket connection.
If the serial number is authenticated then the server will communicate with the client as neccessary.
I've tried a few TCP components to test the process but I'm having a similar issue with all of them - the number of concurrent connections is not sufficient.
For each "server", I've built a client capable of initiating multiple connections. When testing locally (server and client using 127.0.0.1), the best I've managed is about 30,000 connections but testing between two Win 2003 servers in a datacenter is giving much worse results - about 5,000 connections before I start getting drop outs.
I believe that Win 2003 / 2008 should be able to support around 100,000 connections so I'm at a loss as to why I'm seeing such low numbers in testing.
If anyone has any suggestions or, better still, some example code to get beyond the limits I'm experiencing then that would would be awesome.
Thx, Adam
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
defaults are a bit different for Vista / 2008
http://support.microsoft.com/kb/929851/en-us?fr=1
http://support.microsoft.com/kb/929851/en-us?fr=1
Check that limitation as well :
[HKEY_LOCAL_MACHINE \System \CurrentControlSet \services \Tcpip \Parameters]
MaxFreeTWTcbs = 1000 (Default = 1000 sockets)
[HKEY_LOCAL_MACHINE \System \CurrentControlSet \services \Tcpip \Parameters]
MaxFreeTWTcbs = 1000 (Default = 1000 sockets)
ASKER
Hi, epasquier - thanks for the information.
I tried the registry settings suggested and it has improved things but I'm still topping out at about 16,000 connections :-(
I need to get as far above 50,000 as possible (65,000 seems to be the ceiling) so any other ideas?
rgds, Adam
I tried the registry settings suggested and it has improved things but I'm still topping out at about 16,000 connections :-(
I need to get as far above 50,000 as possible (65,000 seems to be the ceiling) so any other ideas?
rgds, Adam
ASKER
Just couldn't get sufficient connections with TCP so now looking at UDP.
Thanks anyway.
Adam
Thanks anyway.
Adam
I mean, if you tried the 3 most common sets :
- TServerSocket (delphi old WinSock wrapper)
- ICS (Internet Component Suite)
- Indy
and they all give you the same problems, then you should not look the solution in the code, but in some registry parameter or OS documentation about CNX limitations