论坛信息 |
最新加入:
l_hx
|
今日帖子:
5
|
在线用户:
2
|
|
|
|
导航: |
论坛 -> DELPHI技术
斑竹:liumazi,sephil |
|
作者: |
|
2023/3/15 15:46:13 |
标题: |
RTC三层控件RtcHttpClient的坑与解决! |
浏览:542 |
|
加入我的收藏 |
楼主: |
先说废话~~这款老牌控件使用起来很方便,特别自带TRtcValue万能类型体使用起来可以自由切换json和RTC数据结构,自由度很高。 根据官方自带的demo在界面上放置一个RtcHttpClient和RtcClientModule 就可以使用各种远程函数了。 正常使用没发现任何问题了,如果长时间客户端不关闭的情况下,调用频率高了就发现各种诡异的报错!
然后我就想到idhttp这个控件也有这个毛病,然后就动态创建RtcHttpClient来使用,发现很多报错问题都能解决了。但是时间久了也会报错了。 try myRtcHttpClient:=TRtcHttpClient.Create(nil); myRtcHttpClient.Connect(); finally myRtcHttpClient.Free; end; 然后分析了控件源码发现一个问题。 Inc(ClientConnection_Count); Inc(TotalConnection_Count); 调用 myRtcHttpClient.Connect(); 增加一个链接计次,然后Free不能直接减掉计次。 RTC_CONNECTION_LIMIT:integer=50000; 如果这个计次超过50000就无法继续使用了,我以为free之后就会断开链接少计次。
然后代码再修改下free之间 先断开链接,就稳定运行了,包括做频率高的心跳包和线程里面高频的访问都没问题了
try myRtcHttpClient:=TRtcHttpClient.Create(nil); myRtcHttpClient.Connect(); finally myRtcHttpClient.Disconnect; myRtcHttpClient.Free; end;
----------------------------------------------
123 |
作者: |
|
2023/3/15 16:57:28 |
1楼: |
如果是 HTTP 的话,为什么不直接用 WebService ?
----------------------------------------------
-
|
作者: |
dacsd (ddd) |
★☆☆☆☆ |
-
|
盒子活跃会员 |
|
2023/3/15 17:06:53 |
2楼: |
点赞
----------------------------------------------
-
|
作者: |
szlbz (秋风) |
★☆☆☆☆ |
-
|
盒子活跃会员 |
|
2023/3/15 22:38:53 |
3楼: |
谢谢分享
----------------------------------------------
-
|
作者: |
|
2023/3/18 8:51:52 |
4楼: |
谢谢分享
----------------------------------------------
只有偏执狂才能生存!
|
作者: |
|
2023/3/18 21:11:33 |
5楼: |
谢谢分享,感觉RTC比datasnap复杂,而且不如datasnap功能强大,但是跨平台是亮点
----------------------------------------------
-
|
作者: |
|
2023/3/20 8:46:58 |
6楼: |
这个问题遇到过,没找到原因,看了此文才知道原因。感谢分享
----------------------------------------------
Delphi爱好者。
|
|