I decided the socket pool approach was more overhead than I wanted to attempt right now, so I went back to my single socket loop.
I switched to a while-do loop, and now have this working as shown below, but the odd thing is that each receiver seems to be getting the command string twice. I can see that in the remote service log. I do have the service coded to close the connection after receiving this particular command. for Counter := 0 to StoreCounter-1 do begin mmo1.Lines.Add(FieldByName('StoreNumber').AsString); WSocket1.Addr := FieldByName('StoreNumber').AsString; WSocket1.Port := M5Port; WSocket1.Connect; while WSocket1.State <> wsClosed do begin Application.ProcessMessages; Sleep(3); end; Next; end; ---- "Jörg Fischer" <tur...@gmx.de> wrote: > Am 11.07.2017 um 20:53 schrieb kmille...@woh.rr.com: > > From the sound of it the socket pool approach certainly looks like the way > > to go. I am dealing with a bit less than 300 potential servers > > for this process. I tried a version of the "wait until it's closed" > > approach, but all that ever did was lock up the application, no doubt > > because I wrote it incorrectly in the first place. :) > > Have a look at how TWSocketServer handles its Client Connections: It > just keeps a list of all TWSocketClient Objects, > e.g. in TCustomWSocketServer.TriggerSessionAvailable(), > OverbyteICSWsocketS.pas. > Unfortunately this is the reverse of what you wanted to do, so you > cannot simply use this class. > > Personally I would not bother too much with connection pooling below > about a 1000 connections, but you could simply check how many items this > list already has. > > J. Fischer > > > > I have no idea, however, how to go about creating or using a pool such as > > you describe. I've really only ever dealt with a single client/server pair > > on anything other than the Indy components. Would you be so kind as to > > point me toward some resource, example, or tutorial on this subject? > > > > ---- Angus Robertson - Magenta Systems Ltd <an...@magsys.co.uk> wrote: > >>> This new version has presented me with a problem. I can > >>> successfully connect to the first device in the list, and send > >>> the command in the OnConnected event. Through reading comments in > >>> the source, I understand that the problems originated with the > >>> way I'm handling this. > >>> > >>> After the first connect, I try to do the next, which, I can see, > >>> is the problem. I cannot change the address because that original > >>> connection is still open. > >> You are using async functions, and trying to start a second connection > >> on the socket before the first has closed. > >> > >> You either need to check in your loop that the socket state is closed > >> already and wait until it is, or create an array of TWSockets so you > >> can send these several messages in parallel. > >> > >> The big problem with TCP/IP is connection timeouts, it will usually > >> wait 30 to 60 seconds attempting to make a connection before giving an > >> error, which can slow down your messaging dramatically with a single > >> socket. > >> > >> So multiple sockets is the way to go. You don't say how many devices > >> you are dealing with, if it's dozens then one wsocket each is trivial, > >> if it's hundreds or thousands you probably want to create a socket pool > >> of maybe 100 wsockets and use them as they come free. > >> > >> Windows can only open so many new sockets per second, particularly if > >> you are using SSL, thus the pool. > >> > >> All the sockets can share the same event handlers, when you create them > >> set the Tag property to the counter number and check Tag in the event > >> so you know what data to send. > >> > >> Angus > >> > >> -- > >> To unsubscribe or change your settings for TWSocket mailing list > >> please goto http://lists.elists.org/cgi-bin/mailman/listinfo/twsocket > >> Visit our website at http://www.overbyte.be > > > -- > To unsubscribe or change your settings for TWSocket mailing list > please goto http://lists.elists.org/cgi-bin/mailman/listinfo/twsocket > Visit our website at http://www.overbyte.be -- To unsubscribe or change your settings for TWSocket mailing list please goto http://lists.elists.org/cgi-bin/mailman/listinfo/twsocket Visit our website at http://www.overbyte.be