I've set the registration timeout value as 600 on the client side, and I am sending keep alive messages every 600 seconds. Maybe that might be the reason??? I've also tried to play with tcp_connection_lifetime, but it didn't work out for me. Although, it seems that it works better, if I set tcp_connection_lifetime to the value of 3600.
On Thu, May 8, 2014 at 3:17 PM, Maksim Solovjov <[email protected]> wrote: > > As far as I understand, you mesn that async reactor should be implemented in > the sip server, and using this approach it will act much better under load. > > But at the moment I am testing with just 3 users. So server should perfom > perfectly under this kind of load. > > Maybe it's vonfiguration problem? > >> On 08 May 2014, at 13:46, [email protected] wrote: >> >> The problem is that originally only UDP transport was considered which was >> enough to run VoIP calls. Sending UDP is not blocking while using TCP is. >> TCP connections don’t work well without using an asynchronous reactor, >> especially under load the problem becomes visible. Ideally, the core should >> be based on such concept but we are not there yet. >> >> Adrian >> >>> On 08 May 2014, at 06:32, Maksim Solovjov <[email protected]> wrote: >>> >>> Thank you for your answer. Can you elaborate on "voice switch and voice >>> calls only"? >>> >>> So there is nothing I can do about it? To make a connection working fast >>> and reliable? >>> >>>> On 08 May 2014, at 04:07, [email protected] wrote: >>>> >>>> You are confronted with the classic problem “this voice switch was >>>> designed to handle UDP and voice calls only” problem. >>>> >>>> This is a VoIP industry level problem, which is yet to be properly >>>> addressed by anyone in the field. >>>> >>>> Adrian >>>> >>>>> On 07 May 2014, at 21:16, Maksim Solovjov <[email protected]> >>>>> wrote: >>>>> >>>>> Hello, >>>>> >>>>> From time to time I am encountering a problem while sending instant >>>>> messages ( using sip MESSAGE request ) or sending call invites. >>>>> Sometimes it works well and fast, sometimes it doesn't, sometimes >>>>> messages are delivered very slowly. With two last options ( doesn't >>>>> work at all and/or messages are delivered slowly ), I get the >>>>> following errors: >>>>> >>>>> ERROR:core:tcp_blocking_connect: timeout 10 s elapsed from 10 s >>>>> ERROR:core:tcpconn_connect: tcp_blocking_connect failed >>>>> ERROR:core:tcp_send: connect failed >>>>> ERROR:tm:msg_send: tcp_send failed >>>>> ERROR:tm:t_forward_nonack: sending request failed >>>>> >>>>> My devices are behind NAT ( mobile phones ) and I am using pjsip with >>>>> tcp connection. >>>>> Moreover I am trying to set up a persistent connection and hope, that >>>>> server will reuse it, when it needs to send something. I am sending >>>>> keep-alive packets every 600 seconds and I am not using any STUN or >>>>> TURN servers. >>>>> >>>>> My opensips and rtpproxy are running on EC2, so are behind NAT as well. >>>>> And I don't have any STUN or TURN servers intalled ( should I install >>>>> any of it? ) >>>>> >>>>> Any help, advice or suggestions would be highly appreciated! >>>>> Here is my opensips.cfg, please help: >>>>> >>>>> debug=3 >>>>> log_stderror=no >>>>> log_facility=LOG_LOCAL1 >>>>> >>>>> fork=yes >>>>> children=4 >>>>> >>>>> dns=no >>>>> rev_dns=no >>>>> >>>>> disable_tcp=no >>>>> >>>>> listen=udp:private-ip:5060 # CUSTOMIZE ME >>>>> listen=tcp:private-ip:5060 >>>>> >>>>> advertised_address="public-ip" >>>>> alias="public-ip:5060" >>>>> alias="domain.com:5060" #// NB!! domain address is not associated with >>>>> public-ip ( using A record ) >>>>> >>>>> db_default_url="mysql://opensips:opensipsrw@database-url/opensips" >>>>> >>>>> mpath="/usr/lib64/opensips/modules/" >>>>> >>>>> ### MYSQL module >>>>> loadmodule "db_mysql.so" >>>>> >>>>> ### Domain module >>>>> loadmodule "domain.so" >>>>> modparam("domain", "db_url", >>>>> "mysql://opensips:opensipsrw@database-url/opensips") >>>>> >>>>> >>>>> #### SIGNALING module >>>>> loadmodule "signaling.so" >>>>> >>>>> #### StateLess module >>>>> loadmodule "sl.so" >>>>> >>>>> #### Transaction Module >>>>> loadmodule "tm.so" >>>>> modparam("tm", "fr_timer", 5) >>>>> modparam("tm", "fr_inv_timer", 30) >>>>> modparam("tm", "restart_fr_on_each_reply", 0) >>>>> modparam("tm", "onreply_avp_mode", 1) >>>>> >>>>> #### Record Route Module >>>>> loadmodule "rr.so" >>>>> /* do not append from tag to the RR (no need for this script) */ >>>>> modparam("rr", "append_fromtag", 0) >>>>> >>>>> #### MAX ForWarD module >>>>> loadmodule "maxfwd.so" >>>>> >>>>> #### SIP MSG OPerationS module >>>>> loadmodule "sipmsgops.so" >>>>> >>>>> #### FIFO Management Interface >>>>> loadmodule "mi_fifo.so" >>>>> modparam("mi_fifo", "fifo_name", "/tmp/opensips_fifo") >>>>> modparam("mi_fifo", "fifo_mode", 0666) >>>>> >>>>> #### URI module >>>>> loadmodule "uri.so" >>>>> modparam("uri", "use_uri_table", 0) >>>>> >>>>> #### USeR LOCation module >>>>> loadmodule "usrloc.so" >>>>> modparam("usrloc", "nat_bflag", "NAT") >>>>> modparam("usrloc", "db_mode", 0) >>>>> >>>>> #### REGISTRAR module >>>>> loadmodule "registrar.so" >>>>> modparam("registrar", "tcp_persistent_flag", "TCP_PERSISTENT") >>>>> modparam("registrar", "received_avp", "$avp(rcv)") >>>>> >>>>> loadmodule "nathelper.so" >>>>> modparam("nathelper", "received_avp", "$avp(rcv)") >>>>> >>>>> loadmodule "rtpproxy.so" >>>>> modparam("rtpproxy", "rtpproxy_sock", "udp:127.0.0.1:12221") >>>>> >>>>> #### ACCounting module >>>>> loadmodule "acc.so" >>>>> modparam("acc", "early_media", 0) >>>>> modparam("acc", "report_cancels", 0) >>>>> modparam("acc", "detect_direction", 0) >>>>> modparam("acc", "failed_transaction_flag", "ACC_FAILED") >>>>> modparam("acc", "log_flag", "ACC_DO") >>>>> modparam("acc", "log_missed_flag", "ACC_MISSED") >>>>> >>>>> >>>>> route{ >>>>> >>>>> force_rport(); #nathelper >>>>> if (nat_uac_test("23")) { #nathelper >>>>> if (is_method("REGISTER")) { >>>>> fix_nated_register(); #nathelper >>>>> setbflag(NAT); >>>>> } else { >>>>> fix_nated_contact(); #nathelper >>>>> setflag(NAT); >>>>> } >>>>> } >>>>> >>>>> if (!mf_process_maxfwd_header("10")) { >>>>> sl_send_reply("483","Too Many Hops"); >>>>> exit; >>>>> } >>>>> if (has_totag()) { >>>>> # sequential requests within a dialog should >>>>> # take the path determined by record-routing >>>>> if (loose_route()) { >>>>> >>>>> if (is_method("BYE")) { >>>>> setflag(ACC_DO); # do accounting ... >>>>> setflag(ACC_FAILED); # ... even if the >>>>> transaction fails >>>>> } else if (is_method("INVITE")) { >>>>> # even if in most of the cases is >>>>> useless, do RR for >>>>> # re-INVITEs alos, as some buggy >>>>> clients do change route set >>>>> # during the dialog. >>>>> record_route(); >>>>> } >>>>> >>>>> if (check_route_param("nat=yes")) >>>>> setflag(NAT); >>>>> >>>>> # route it out to whatever destination was set >>>>> by loose_route() >>>>> # in $du (destination URI). >>>>> route(relay); >>>>> } else { >>>>> if ( is_method("ACK") ) { >>>>> if ( t_check_trans() ) { >>>>> # non loose-route, but >>>>> stateful ACK; must be an ACK after >>>>> # a 487 or e.g. 404 from upstream >>>>> server >>>>> t_relay(); >>>>> exit; >>>>> } else { >>>>> # ACK without matching transaction -> >>>>> # ignore and discard >>>>> exit; >>>>> } >>>>> } >>>>> sl_send_reply("404","Not here"); >>>>> } >>>>> exit; >>>>> } >>>>> # CANCEL processing >>>>> if (is_method("CANCEL")) >>>>> { >>>>> if (t_check_trans()) >>>>> t_relay(); >>>>> exit; >>>>> } >>>>> >>>>> t_check_trans(); >>>>> >>>>> if ( !(is_method("REGISTER") ) ) { >>>>> if (from_uri==myself) >>>>> { >>>>> } else { >>>>> # if caller is not local, then called number >>>>> must be local >>>>> if (!uri==myself) { >>>>> send_reply("403","Rely forbidden"); >>>>> exit; >>>>> } >>>>> } >>>>> } >>>>> # preloaded route checking >>>>> if (loose_route()) { >>>>> xlog("L_ERR", >>>>> "Attempt to route with preloaded Route's [$fu/$tu/$ru/$ci]"); >>>>> if (!is_method("ACK")) >>>>> sl_send_reply("403","Preload Route denied"); >>>>> exit; >>>>> } >>>>> >>>>> # record routing >>>>> if (!is_method("REGISTER|MESSAGE")) >>>>> record_route(); >>>>> >>>>> # account only INVITEs >>>>> if (is_method("INVITE")) { >>>>> >>>>> setflag(ACC_DO); # do accounting >>>>> } >>>>> >>>>> if (!uri==myself) { >>>>> append_hf("P-hint: outbound\r\n"); >>>>> route(relay); >>>>> } >>>>> # requests for my domain >>>>> if (is_method("PUBLISH|SUBSCRIBE")) >>>>> { >>>>> sl_send_reply("503", "Service Unavailable"); >>>>> exit; >>>>> } >>>>> >>>>> if (is_method("REGISTER")) >>>>> { >>>>> setflag(TCP_PERSISTENT); >>>>> if (!save("location")) >>>>> sl_reply_error(); >>>>> >>>>> exit; >>>>> } >>>>> >>>>> if ($rU==NULL) { >>>>> # request with no Username in RURI >>>>> sl_send_reply("484","Address Incomplete"); >>>>> exit; >>>>> } >>>>> # do lookup with method filtering >>>>> if (!lookup("location","m")) { >>>>> t_newtran(); >>>>> t_reply("404", "Not Found"); >>>>> exit; >>>>> } >>>>> >>>>> if (isbflagset(NAT)) setflag(NAT); >>>>> >>>>> # when routing via usrloc, log the missed calls also >>>>> setflag(ACC_MISSED); >>>>> route(relay); >>>>> } >>>>> >>>>> route[relay] { >>>>> # for INVITEs enable some additional helper routes >>>>> if (is_method("INVITE")) { >>>>> >>>>> if (isflagset(NAT)) { >>>>> rtpproxy_offer("ro"); >>>>> } >>>>> >>>>> t_on_branch("per_branch_ops"); >>>>> t_on_reply("handle_nat"); >>>>> t_on_failure("missed_call"); >>>>> >>>>> } >>>>> >>>>> if (isflagset(NAT)) { >>>>> add_rr_param(";nat=yes"); >>>>> } >>>>> >>>>> if (!t_relay()) { >>>>> send_reply("500","Internal Error"); >>>>> }; >>>>> exit; >>>>> } >>>>> >>>>> branch_route[per_branch_ops] { >>>>> xlog("new branch at $ru\n"); >>>>> } >>>>> >>>>> >>>>> onreply_route[handle_nat] { >>>>> if (nat_uac_test("1")) >>>>> fix_nated_contact(); >>>>> if ( isflagset(NAT) ) >>>>> rtpproxy_answer("ro"); >>>>> xlog("incoming reply\n"); >>>>> } >>>>> >>>>> failure_route[missed_call] { >>>>> if (t_was_cancelled()) { >>>>> exit; >>>>> } >>>>> >>>>> # uncomment the following lines if you want to block client >>>>> # redirect based on 3xx replies. >>>>> ##if (t_check_status("3[0-9][0-9]")) { >>>>> ##t_reply("404","Not found"); >>>>> ## exit; >>>>> ##} >>>>> >>>>> } >>>>> >>>>> >>>>> Thank you in advance! >>>>> >>>>> _______________________________________________ >>>>> Users mailing list >>>>> [email protected] >>>>> http://lists.opensips.org/cgi-bin/mailman/listinfo/users >>>> >>>> >>>> _______________________________________________ >>>> Users mailing list >>>> [email protected] >>>> http://lists.opensips.org/cgi-bin/mailman/listinfo/users >>> >>> _______________________________________________ >>> Users mailing list >>> [email protected] >>> http://lists.opensips.org/cgi-bin/mailman/listinfo/users >> >> >> _______________________________________________ >> Users mailing list >> [email protected] >> http://lists.opensips.org/cgi-bin/mailman/listinfo/users _______________________________________________ Users mailing list [email protected] http://lists.opensips.org/cgi-bin/mailman/listinfo/users
