Tim wrote:
Go ahead and increase the wait time between checks on the TRANSFERPOOL applications. Your callers will not notice.
Ok, I'll test that.
Quote:
The next thing I would do is to build indexes on the table or tables that are queried by TRANSFERPOOL, to ensure the queries are as quick as they can possibly be.
Actually I'm not using tables, just disk files. I guess the disk overhead is also affecting considerably...
Quote:
'Serializing' the search is a good idea. I'm not really sure how you might accomplish that.
I was thinking: TRANSFERPOOL applications run on channels 24 to 43 and each one knows its port number (@PORT). What if I make each application to check once and then wait for (@PORT-20) seconds? That would serialize them: Each second, except for the first 4 (nothing critical), there will be a single app checking for transfer request files on disk. This minimizes disk overhead, optimizes CPU performance and minimizes the chance that two or more apps from that pool will find the same file and try to perform the call and ask for the switching simultaneoulsy with other apps.
This might work for awhile, but once the switch is over (any party hangs up), the TRANSFERPOOL application may get de-synchronized with the others, given that the channels were release at a random time, after which the app continues waiting and checking for transfer requests every 20 seconds... Gets tricky!
Quote:
Consider using the UDP steps. You could have each TRANSFERPOOL bind to an distinct IP port at startup, using the "UDP Bind" step. Instead of the Wait step, have the port listen with the "UDP Receive" step. When an in-bound port decides to request a transfer, instead of writing to your "switch pool" table, send a UDP message, via "UDP Send" step to the TRANSFERPOOL port. Does this makes sense?
If every TRANSFERPOOL app binds to a distinct port, there wouldn't be a single TRANFERPOOL port to send requests with "UDP Send"...
There should be some kind of 'Transfer Requests Manager' which receives the requests from the VOICEPOOL apps sent to a single port and channels them to a managed list of available/busy applications in the TRANSFERPOOL.
UDP steps here sound like a one-way communication however...
Quote:
Note that you probably won't be able to get rid of the database interaction all together. Your in-bound ports need to be able to tell when an outbound port is available to place a call.
Right, I need two-way communications here.
Quote:
You might be able to construct something even fancier using TCP (also available in TeleFlow steps). In this case, I'd make a "transfer manager" application, that could handle all the requests to guarantee no two in-bound ports request the same outbound port. The signals from the in-bound ports, to the manager would be more like "I need a port to transfer my caller", and the manager would choose and signal the out-bound port.
Oh boy
Well, guess that thinking alike is common behaviour between seasoned developers, eh?
Problem is I'm already certifying the IVR application for the customer, so I don't have more time right now to develop a transfer manager application
Quote:
This reminds me of a pet-project I've always wanted to do, but never have had the time. I'd love it if TeleFlow Server itself could handle these inter-port co-ordinations. Essentially, I want to "internalize" the switching pool apps so they are an inherent, native, capability of TFServer. Sadly, this will not happen in time to help your project.
Honestly, as much fun as it is to contemplate these systems, the simple version is probably best. I'd stick with my first two suggestions, and see what happens.
Alright, I'll see what comes up and document results here.
Thanks a lot!