refine code for bug #217, use recv thread to set the timeout.
正在显示
3 个修改的文件
包含
29 行增加
和
16 行删除
@@ -96,3 +96,27 @@ int SrsRecvThread::cycle() | @@ -96,3 +96,27 @@ int SrsRecvThread::cycle() | ||
96 | return ret; | 96 | return ret; |
97 | } | 97 | } |
98 | 98 | ||
99 | +void SrsRecvThread::on_thread_start() | ||
100 | +{ | ||
101 | + // the multiple messages writev improve performance large, | ||
102 | + // but the timeout recv will cause 33% sys call performance, | ||
103 | + // to use isolate thread to recv, can improve about 33% performance. | ||
104 | + // @see https://github.com/winlinvip/simple-rtmp-server/issues/194 | ||
105 | + // @see: https://github.com/winlinvip/simple-rtmp-server/issues/217 | ||
106 | + rtmp->set_recv_timeout(ST_UTIME_NO_TIMEOUT); | ||
107 | + | ||
108 | + // disable the protocol auto response, | ||
109 | + // for the isolate recv thread should never send any messages. | ||
110 | + rtmp->set_auto_response(false); | ||
111 | +} | ||
112 | + | ||
113 | +void SrsRecvThread::on_thread_stop() | ||
114 | +{ | ||
115 | + // enable the protocol auto response, | ||
116 | + // for the isolate recv thread terminated. | ||
117 | + rtmp->set_auto_response(true); | ||
118 | + | ||
119 | + // reset the timeout to pulse mode. | ||
120 | + rtmp->set_recv_timeout(SRS_CONSTS_RTMP_PULSE_TIMEOUT_US); | ||
121 | +} | ||
122 | + |
@@ -59,6 +59,9 @@ public: | @@ -59,6 +59,9 @@ public: | ||
59 | virtual int start(); | 59 | virtual int start(); |
60 | virtual void stop(); | 60 | virtual void stop(); |
61 | virtual int cycle(); | 61 | virtual int cycle(); |
62 | +public: | ||
63 | + virtual void on_thread_start(); | ||
64 | + virtual void on_thread_stop(); | ||
62 | }; | 65 | }; |
63 | 66 | ||
64 | #endif | 67 | #endif |
@@ -498,21 +498,11 @@ int SrsRtmpConn::playing(SrsSource* source) | @@ -498,21 +498,11 @@ int SrsRtmpConn::playing(SrsSource* source) | ||
498 | { | 498 | { |
499 | int ret = ERROR_SUCCESS; | 499 | int ret = ERROR_SUCCESS; |
500 | 500 | ||
501 | - // the multiple messages writev improve performance large, | ||
502 | - // but the timeout recv will cause 33% sys call performance, | ||
503 | - // to use isolate thread to recv, can improve about 33% performance. | ||
504 | - // @see https://github.com/winlinvip/simple-rtmp-server/issues/194 | 501 | + // use isolate thread to recv, |
505 | // @see: https://github.com/winlinvip/simple-rtmp-server/issues/217 | 502 | // @see: https://github.com/winlinvip/simple-rtmp-server/issues/217 |
506 | - //rtmp->set_recv_timeout(SRS_CONSTS_RTMP_PULSE_TIMEOUT_US); | ||
507 | - rtmp->set_recv_timeout(ST_UTIME_NO_TIMEOUT); | ||
508 | - | ||
509 | - // disable the protocol auto response, | ||
510 | - // for the isolate recv thread should never send any messages. | ||
511 | - rtmp->set_auto_response(false); | 503 | + SrsRecvThread trd(rtmp); |
512 | 504 | ||
513 | - // use isolate thread to recv, | ||
514 | // start isolate recv thread. | 505 | // start isolate recv thread. |
515 | - SrsRecvThread trd(rtmp); | ||
516 | if ((ret = trd.start()) != ERROR_SUCCESS) { | 506 | if ((ret = trd.start()) != ERROR_SUCCESS) { |
517 | srs_error("start isolate recv thread failed. ret=%d", ret); | 507 | srs_error("start isolate recv thread failed. ret=%d", ret); |
518 | return ret; | 508 | return ret; |
@@ -524,10 +514,6 @@ int SrsRtmpConn::playing(SrsSource* source) | @@ -524,10 +514,6 @@ int SrsRtmpConn::playing(SrsSource* source) | ||
524 | // stop isolate recv thread | 514 | // stop isolate recv thread |
525 | trd.stop(); | 515 | trd.stop(); |
526 | 516 | ||
527 | - // enable the protocol auto response, | ||
528 | - // for the isolate recv thread terminated. | ||
529 | - rtmp->set_auto_response(true); | ||
530 | - | ||
531 | return ret; | 517 | return ret; |
532 | } | 518 | } |
533 | 519 |
-
请 注册 或 登录 后发表评论