<div><font color="#a0a0a8"><span style="font-family: 'Courier New'; color: rgb(0, 0, 0); ">Inline, I am not a big expert so take my comments with a grain of salt.</span></font></div><div><font color="#a0a0a8"><br></font></div><div><span style="color: rgb(160, 160, 168); ">On Sunday, February 26, 2012 at 9:30 AM, Anita Hall wrote:</span></div>
                <blockquote type="cite" style="border-left-style:solid;border-width:1px;margin-left:0px;padding-left:10px;">
                    <span><div><div>Hi Joao :)<br><br><br><div>On Sat, Feb 25, 2012 at 7:34 PM, João Mesquita <span dir="ltr">&lt;<a href="mailto:jmesquita@freeswitch.org">jmesquita@freeswitch.org</a>&gt;</span> wrote:<br><blockquote type="cite"><div>
<div>
                <div style="font-family:'Courier New';font-size:13px"><span style="color:rgb(160,160,168);font-family:Helvetica">On Saturday, February 25, 2012 at 10:53 AM, Anita Hall wrote:</span></div><blockquote type="cite"><div>
                    <span><div><div>Thanks Joao<br><br>Yes, language selection depends on what we want to do. Currently, we are using python stackless for running multi-threaded IVR in FreeSWITCH but we are not happy :(<br>
</div></div></span></div></blockquote></div><div><font face="'Courier New'">I would love to know why… How many channels are you running? Are you using ESL currently or mod_python? I myself use Python a lot with ESL and I've never hit the wall when it comes to performance despite of all the bad mojo Python has around it for the GIL stuff and all. And I can tell you that I've already done some big things.</font></div>
</div></blockquote><div><br>Yes we are using ESL and python stackless. The python stackless interpreter runs in a daemon mode. We run around 240 channels over E1 with FreeTDM.</div></div></div></div></span></blockquote><div><font face="'Courier New'">That is far from being a large number of channels as far as ESL is concerned (and python for all I care).</font></div><div>&nbsp;</div><blockquote type="cite" style="border-left-style:solid;border-width:1px;margin-left:0px;padding-left:10px;"><span><div><div><div><div> The IVR is done in the same machine as FreeSWITCH. The problem that we are facing has not to do with hitting the CPU limit. Our IVR applications make a lot of DB and HTTP requests. Now whenever one IVR application is stuck because of some pending DB or HTTP request, it blocks other threads as well, since python stackless is not truly multi-threaded (Am I correct in saying that?).</div></div></div></div></span></blockquote><div><font face="'Courier New'">Yes you are correct. Python has something called GIL that prevents it from using real threads and Stackless (from what I can read on the docs) is just an implementation of green threads, just another term for "emulating threads" without really using multiple OS threads.</font></div><div>&nbsp;</div><blockquote type="cite" style="border-left-style:solid;border-width:1px;margin-left:0px;padding-left:10px;"><span><div><div><div><div>Therefore, we offload the external DB and HTTP requests to another daemon with uses RPyC library. <br>
<br>I do not want to run another daemon in python stackless. May be, I should experiment some with mod_python.</div></div></div></div></span></blockquote><div><span style="font-family: 'Courier New'; ">I've never used mod_python, just to be clear. I asked if you were because I wouldn't be able to help if you were. I don't recommend using mod_python because the Python interpreter is something quite big to be spawned like an embedded language like that. Lua would definitely be the recommended language if you want FreeSWITCH to spawn one interpreter per channel like mod_lua would do.</span>&nbsp;</div><blockquote type="cite" style="border-left-style:solid;border-width:1px;margin-left:0px;padding-left:10px;"><span><div><div><div><div> How many concurrent calls have you run using python over ESL?</div></div></div></div></span></blockquote><div><font face="'Courier New'">Thousands.</font>&nbsp;</div><blockquote type="cite" style="border-left-style:solid;border-width:1px;margin-left:0px;padding-left:10px;"><span><div><div><div><div>Do you use stackless? Why or why not ? :)<br></div></div></div></div></span></blockquote><div><font face="'Courier New'">No, I don't. Simply because I never had the need to. Most ppl that use Python and start reading about the GIL and the lack of native thread thing end up blaming the language for stuff they should be blaming whoever coded the application. Think for a second about what you are proposing and imagine the solution if you "had" real threads.</font></div><div><font face="'Courier New'"><br></font></div><div><font face="'Courier New'">If you REALLY believe that you need multiple "threads", you can always use several techniques for multiprocessing. I am very fond of using ZeroMQ for FAN IN/OUT operations to several other Python processes. That way you can REALLY scale your application if you need to. If that sounds complicated (sometimes it can be overkill), look at the multiprocessing module of python. Should do the trick for "threads" that execute serial operations like I/O such as you are doing.</font></div><div><font face="'Courier New'"><br></font></div><div><font face="'Courier New'">Careful with the snowball effect tho. If your "threads" are blocking because of I/O, maybe you need to look at the real reason for why they are blocking rather than rewriting the whole thing. Maybe RPyC is not running on async mode and therefore your task lets get stuck waiting for the lib? I cannot know until I see some code.</font></div><blockquote type="cite" style="border-left-style:solid;border-width:1px;margin-left:0px;padding-left:10px;"><span><div><div><div><div>&nbsp;</div><blockquote type="cite"><div><br><div><blockquote type="cite"><div>
<span><div><div>Why have you found a need to run the IVR on a different box than the FreeSWITCH server? We currently run the IVR on the Media server itself (which is FreeSWITCH). We are taking incoming / outgoing calls over PRI/E1. Even when we change to SIP calls, the media server itself can run both FS and the IVR. What could be an advantage in doing it on separate machines ?<br>

<br></div></div></span></div></blockquote></div><div><font face="'Courier New'">If you had the need to share state between different IVRs that are being executed on different media servers you would know. FreeSWITCH itself is obviously going to need resources faster than the IVR controller, so it is a pretty common design to have several FS boxes with 1 IVR box controlling them all.</font></div>
</div></blockquote><div><br>It is very interesting that you brought this up :) We do use a conference server (a different machine) and use that for bridging our incoming and outgoing calls. Conference allows us to add extra functionality which is not possible in bridging, such as transferring the call to another agent if the first one does not answer. (should we be using mod_fifo or mod_callcenter for that?)<br></div></div></div></div></span></blockquote><div><font face="'Courier New'">That's a matter of taste and feature requirement. Normally I would advice you to use/improve what's already out there, ain't what open source is all about anyway?</font></div><blockquote type="cite" style="border-left-style:solid;border-width:1px;margin-left:0px;padding-left:10px;"><span><div><div><div><div>
<br>The calls are transferred from the FreeSWITCH machine to the conference server over SIP. Is it possible to transfer the media over ESL? Do you do bridging between different IVRs? <br></div></div></div></div></span></blockquote><div><font face="'Courier New'">It is possible. With ESL you can do pretty much anything you can do on mod_lua, xml dial plan or even most C modules if you will. Of course the C module is the most flexible one, but also the most "complicated" one to get it right.</font>&nbsp;</div><blockquote type="cite" style="border-left-style:solid;border-width:1px;margin-left:0px;padding-left:10px;"><span><div><div><div><div><br>I like your design, but I was wondering should there be an extra IVR server with load balancing in between?<br></div></div></div></div></span></blockquote><div><font face="'Courier New'">Again, that depends on your requirements. The cool thing about ZeroMQ fanin/fanout thing is that you can scale horizontally if your logic is right and you don't have to keep sharing state using some type of IO bound central point such as a DB.</font></div><div><font face="'Courier New'"><br></font></div><div><font face="'Courier New'">I can't say what you SHOULD be doing because I don't know your application and your budget or even how much you expect to grow.</font></div><div>&nbsp;</div><blockquote type="cite" style="border-left-style:solid;border-width:1px;margin-left:0px;padding-left:10px;"><span><div><div><div><div>
<br>Actually, the IVR system I am managing right now was not done by me, so I have to do a complete makeover :) This discussion on architecture will help.<br><br>Gracias!<br>Anita. <br><br></div><blockquote type="cite"><div>
<div><div><div>&nbsp;</div><blockquote type="cite"><div><span><div><div>Thanks. <br><br clear="all">regards,<br>Anita<br><br>

<br><br><div>On Fri, Feb 24, 2012 at 11:58 AM, João Mesquita <span dir="ltr">&lt;<a href="mailto:jmesquita@freeswitch.org" target="_blank">jmesquita@freeswitch.org</a>&gt;</span> wrote:<br><blockquote type="cite"><div>

                <div style="font-family:'Courier New';font-size:13px">In my opinion, the language you are using pretty much depends on the project requirements. C will always be faster then anything else if implemented correctly. Also, there is advantages of using native APIs (no matter with ESL or as a module).<div>

<br></div><div>Nonetheless, the implementation is more complex, requires more knowledge and at last and most important, TIME. Do you have the time and resources to do it in C and will it be justified based on the project budget you have?</div>

<div><br></div><div>Other then that, I would use ESL because you get the benefit of having your application running on another box and even have it control several boxes at once which is a common requirement for large IVRs.</div>

<div><br></div><div>I hope it helps.</div><div><br></div><div>Regards,</div></div><span><font color="#888888">
                <div><div><br></div><div>--&nbsp;</div><div>João Mesquita</div><div>Sent with <a href="http://www.sparrowmailapp.com/?sig" target="_blank">Sparrow</a></div><div><br></div></div></font></span><div>
<div>
                   
                <p style="color:#a0a0a8">On Friday, February 24, 2012 at 4:29 AM, Vitalie Colosov wrote:</p><blockquote type="cite"><div>
                    <span><div><div>Why not to use powerful and fast lua scripts with DB access - example for DB select:<div>------------------------</div><div><div>subscriber = "1000";</div><div>my_field = '';</div>

<div>local dbh = assert(freeswitch.Dbh("db","fs_user","fs_password"));</div>
<div>dbh:query("select my_field1 from my_table1 where subscriber = '"..subscriber.."'",&nbsp;</div><div>function(row)&nbsp;</div><div><span style="white-space:pre-wrap">        </span>my_field = row.my_field1;</div>


<div>end);</div><div>dbh:release();</div><div>--do whatever you need here!!</div><div>------------------------</div><div><br></div><div>obviously you need to configure ODBC for access, but this is described:</div><div><a href="http://wiki.freeswitch.org/wiki/Using_ODBC_in_the_core#CentOS_5.2" target="_blank">http://wiki.freeswitch.org/wiki/Using_ODBC_in_the_core#CentOS_5.2</a></div>


<div><br></div><br><div>2012/2/23 Anita Hall <span dir="ltr">&lt;<a href="mailto:anita.hall@simmortel.com" target="_blank">anita.hall@simmortel.com</a>&gt;</span><br><blockquote type="cite"><div>
Hi<br><br>We are considering writing our own module for processing IVR in C. We are considering using mod_event_socket and then modify it to consume and produce the events internally instead of passing them to the socket. Is this a good idea?<br>



<br>I know FreeSWITCH already has a mod_dialplan_xml which can use mod_curl to communicate to the outside world for I/O and DB access. But ...<br><br>1) Does XML have all the power flexibility that will be needed for powerful IVR applications? <br>



<br>2) Does mod_dialplan_xml use a separate thread for each IVR execution ? What will be the overhead of interpreting the XML ?<br><br>3) Any more ideas ?<br><br>Thanks :)<br><br clear="all">regards,<br>Anita<br><br>
<br>_________________________________________________________________________<br>
Professional FreeSWITCH Consulting Services:<br>
<a href="mailto:consulting@freeswitch.org" target="_blank">consulting@freeswitch.org</a><br>
<a href="http://www.freeswitchsolutions.com" target="_blank">http://www.freeswitchsolutions.com</a><br>
<br>
FreeSWITCH-powered IP PBX: The CudaTel Communication Server<br>
<a href="http://www.cudatel.com" target="_blank">http://www.cudatel.com</a><br>
<br>
Official FreeSWITCH Sites<br>
<a href="http://www.freeswitch.org" target="_blank">http://www.freeswitch.org</a><br>
<a href="http://wiki.freeswitch.org" target="_blank">http://wiki.freeswitch.org</a><br>
<a href="http://www.cluecon.com" target="_blank">http://www.cluecon.com</a><br>
<br>
FreeSWITCH-users mailing list<br>
<a href="mailto:FreeSWITCH-users@lists.freeswitch.org" target="_blank">FreeSWITCH-users@lists.freeswitch.org</a><br>
<a href="http://lists.freeswitch.org/mailman/listinfo/freeswitch-users" target="_blank">http://lists.freeswitch.org/mailman/listinfo/freeswitch-users</a><br>
UNSUBSCRIBE:<a href="http://lists.freeswitch.org/mailman/options/freeswitch-users" target="_blank">http://lists.freeswitch.org/mailman/options/freeswitch-users</a><br>
<a href="http://www.freeswitch.org" target="_blank">http://www.freeswitch.org</a><br>
<br></div></blockquote></div><br></div>
</div><div><div>_________________________________________________________________________</div><div>Professional FreeSWITCH Consulting Services:</div><div><a href="mailto:consulting@freeswitch.org" target="_blank">consulting@freeswitch.org</a></div>

<div><a href="http://www.freeswitchsolutions.com" target="_blank">http://www.freeswitchsolutions.com</a></div><div><br></div><div>FreeSWITCH-powered IP PBX: The CudaTel Communication Server</div><div><a href="http://www.cudatel.com" target="_blank">http://www.cudatel.com</a></div>

<div><br></div><div>Official FreeSWITCH Sites</div><div><a href="http://www.freeswitch.org" target="_blank">http://www.freeswitch.org</a></div><div><a href="http://wiki.freeswitch.org" target="_blank">http://wiki.freeswitch.org</a></div>

<div><a href="http://www.cluecon.com" target="_blank">http://www.cluecon.com</a></div><div><br></div><div>FreeSWITCH-users mailing list</div><div><a href="mailto:FreeSWITCH-users@lists.freeswitch.org" target="_blank">FreeSWITCH-users@lists.freeswitch.org</a></div>

<div><a href="http://lists.freeswitch.org/mailman/listinfo/freeswitch-users" target="_blank">http://lists.freeswitch.org/mailman/listinfo/freeswitch-users</a></div><div>UNSUBSCRIBE:<a href="http://lists.freeswitch.org/mailman/options/freeswitch-users" target="_blank">http://lists.freeswitch.org/mailman/options/freeswitch-users</a></div>

<div><a href="http://www.freeswitch.org" target="_blank">http://www.freeswitch.org</a></div></div></div></span>
                   
                   
                   
                   
                </div></blockquote><div>
                    <br>
                </div>
            </div></div><br>_________________________________________________________________________<br>
Professional FreeSWITCH Consulting Services:<br>
<a href="mailto:consulting@freeswitch.org" target="_blank">consulting@freeswitch.org</a><br>
<a href="http://www.freeswitchsolutions.com" target="_blank">http://www.freeswitchsolutions.com</a><br>
<br>
FreeSWITCH-powered IP PBX: The CudaTel Communication Server<br>
<a href="http://www.cudatel.com" target="_blank">http://www.cudatel.com</a><br>
<br>
Official FreeSWITCH Sites<br>
<a href="http://www.freeswitch.org" target="_blank">http://www.freeswitch.org</a><br>
<a href="http://wiki.freeswitch.org" target="_blank">http://wiki.freeswitch.org</a><br>
<a href="http://www.cluecon.com" target="_blank">http://www.cluecon.com</a><br>
<br>
FreeSWITCH-users mailing list<br>
<a href="mailto:FreeSWITCH-users@lists.freeswitch.org" target="_blank">FreeSWITCH-users@lists.freeswitch.org</a><br>
<a href="http://lists.freeswitch.org/mailman/listinfo/freeswitch-users" target="_blank">http://lists.freeswitch.org/mailman/listinfo/freeswitch-users</a><br>
UNSUBSCRIBE:<a href="http://lists.freeswitch.org/mailman/options/freeswitch-users" target="_blank">http://lists.freeswitch.org/mailman/options/freeswitch-users</a><br>
<a href="http://www.freeswitch.org" target="_blank">http://www.freeswitch.org</a><br>
<br></div></blockquote></div><br>
</div><div><div>_________________________________________________________________________</div><div>Professional FreeSWITCH Consulting Services:</div><div><a href="mailto:consulting@freeswitch.org" target="_blank">consulting@freeswitch.org</a></div>
<div><a href="http://www.freeswitchsolutions.com" target="_blank">http://www.freeswitchsolutions.com</a></div><div><br></div><div>FreeSWITCH-powered IP PBX: The CudaTel Communication Server</div><div><a href="http://www.cudatel.com" target="_blank">http://www.cudatel.com</a></div>
<div><br></div><div>Official FreeSWITCH Sites</div><div><a href="http://www.freeswitch.org" target="_blank">http://www.freeswitch.org</a></div><div><a href="http://wiki.freeswitch.org" target="_blank">http://wiki.freeswitch.org</a></div>
<div><a href="http://www.cluecon.com" target="_blank">http://www.cluecon.com</a></div><div><br></div><div>FreeSWITCH-users mailing list</div><div><a href="mailto:FreeSWITCH-users@lists.freeswitch.org" target="_blank">FreeSWITCH-users@lists.freeswitch.org</a></div>
<div><a href="http://lists.freeswitch.org/mailman/listinfo/freeswitch-users" target="_blank">http://lists.freeswitch.org/mailman/listinfo/freeswitch-users</a></div><div>UNSUBSCRIBE:<a href="http://lists.freeswitch.org/mailman/options/freeswitch-users" target="_blank">http://lists.freeswitch.org/mailman/options/freeswitch-users</a></div>
<div><a href="http://www.freeswitch.org" target="_blank">http://www.freeswitch.org</a></div></div></div></span>
                  
                  
                  
                  
                </div></blockquote><div>
                    <br>
                </div>
            </div></div><br>_________________________________________________________________________<br>
Professional FreeSWITCH Consulting Services:<br>
<a href="mailto:consulting@freeswitch.org">consulting@freeswitch.org</a><br>
<a href="http://www.freeswitchsolutions.com" target="_blank">http://www.freeswitchsolutions.com</a><br>
<br>
FreeSWITCH-powered IP PBX: The CudaTel Communication Server<br>
<a href="http://www.cudatel.com" target="_blank">http://www.cudatel.com</a><br>
<br>
Official FreeSWITCH Sites<br>
<a href="http://www.freeswitch.org" target="_blank">http://www.freeswitch.org</a><br>
<a href="http://wiki.freeswitch.org" target="_blank">http://wiki.freeswitch.org</a><br>
<a href="http://www.cluecon.com" target="_blank">http://www.cluecon.com</a><br>
<br>
FreeSWITCH-users mailing list<br>
<a href="mailto:FreeSWITCH-users@lists.freeswitch.org">FreeSWITCH-users@lists.freeswitch.org</a><br>
<a href="http://lists.freeswitch.org/mailman/listinfo/freeswitch-users" target="_blank">http://lists.freeswitch.org/mailman/listinfo/freeswitch-users</a><br>
UNSUBSCRIBE:<a href="http://lists.freeswitch.org/mailman/options/freeswitch-users" target="_blank">http://lists.freeswitch.org/mailman/options/freeswitch-users</a><br>
<a href="http://www.freeswitch.org" target="_blank">http://www.freeswitch.org</a><br>
<br></div></blockquote></div><br>
</div><div><div>_________________________________________________________________________</div><div>Professional FreeSWITCH Consulting Services:</div><div><a href="mailto:consulting@freeswitch.org">consulting@freeswitch.org</a></div><div><a href="http://www.freeswitchsolutions.com">http://www.freeswitchsolutions.com</a></div><div><br></div><div>FreeSWITCH-powered IP PBX: The CudaTel Communication Server</div><div><a href="http://www.cudatel.com">http://www.cudatel.com</a></div><div><br></div><div>Official FreeSWITCH Sites</div><div><a href="http://www.freeswitch.org">http://www.freeswitch.org</a></div><div><a href="http://wiki.freeswitch.org">http://wiki.freeswitch.org</a></div><div><a href="http://www.cluecon.com">http://www.cluecon.com</a></div><div><br></div><div>FreeSWITCH-users mailing list</div><div><a href="mailto:FreeSWITCH-users@lists.freeswitch.org">FreeSWITCH-users@lists.freeswitch.org</a></div><div><a href="http://lists.freeswitch.org/mailman/listinfo/freeswitch-users">http://lists.freeswitch.org/mailman/listinfo/freeswitch-users</a></div><div>UNSUBSCRIBE:<a href="http://lists.freeswitch.org/mailman/options/freeswitch-users">http://lists.freeswitch.org/mailman/options/freeswitch-users</a></div><div><a href="http://www.freeswitch.org">http://www.freeswitch.org</a></div></div></div></span>
                 
                 
                 
                 
                </blockquote>
                 
                <div>
                    <br>
                </div>