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

Reply via email to