DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: webb123
今日帖子: 3
在线用户: 1
导航: 论坛 -> 网络通讯 斑竹:liumazi,sephil  
作者:
男 xhl (xhl) ★☆☆☆☆ -
盒子活跃会员
2019/4/30 17:22:13
标题:
indy10 idtcpserver如何知道那些用户在线。 浏览:2158
加入我的收藏
楼主: delphi 10.3.1 的  
1、 indy10 idtcpserver如何知道那些客户在线。
 客户端为 智能仪表,有心跳 
 我想知道,连接在线的是哪些客户?

2、特殊条件如合断开 指定的客户。

3、如何 主动下发 信息。
   目前是自动客户轮询心跳后,自动回复,太慢了,
想主动 插入 命令。

4、多客户,网络混搭、命令执行的延时,等造成, idtcpserver
同时收到信息, 用多线程如何安全处理数据。 存入sql2008.
----------------------------------------------
-
作者:
男 wang_80919 (Flying Wang) ★☆☆☆☆ -
普通会员
2019/4/30 17:33:02
1楼: 长连接是可以主动下发的。
你需要自己写一个 Session 对象。
用 Session 来管理 连接。
当然 懒得写这个。
就在服务器的 OnConnect 里头,一次全写了。
反正 断开就是 客户端连接对象.断开 这个函数啊。
发内容就是 客户端连接对象.Send 啊。
你 服务器 被动回复,和 主动发,都得发到 客户端连接对象上。
只要你 连接 没断开,就可以 主动发。
----------------------------------------------
(C)(P)Flying Wang
作者:
男 xhl (xhl) ★☆☆☆☆ -
盒子活跃会员
2019/4/30 21:11:57
2楼: 1,2,3
已经 按 楼上的 处理了, 可以了。

4、 如何处理??
多线程,以前没单独处理国,如何上手。
能段代码不。
----------------------------------------------
-
作者:
男 iamdream (银河恒久远,梦想无止境!) ★☆☆☆☆ -
大贡献会员
2019/5/2 10:05:07
3楼: IdTCPServer本身就是多线程支持客户端的,不用你写什么啊。你只需要做你自己的处理就好了。
----------------------------------------------
-广袤璀璨的银河,永无止境的梦想(梦无止境游银河) 博客挂了……
作者:
男 bahamut8348 (leonna) ★☆☆☆☆ -
普通会员
2019/5/2 12:53:30
4楼: 你都有心跳了还不知道谁在线谁离线么?
----------------------------------------------
--
作者:
男 xhl (xhl) ★☆☆☆☆ -
盒子活跃会员
2019/5/3 10:08:34
5楼: 有心跳,,有些通过二级路由,有些乱,
网络、协议都没规划好,
客户端协议目前改不了,心跳分不清是谁,要发命令再通报,
现实延时、断电、路由等网络问题带来,回答与心跳不太一致。

服务端 192.168.1.2:2000 接到《-192.168.1.245 (路由等 ) 《- 客户端192.168.4.2 :4020  

 发的心跳 客户xxx-zzz 还在线。



服务端 192.168.1.2:2000 - 》交换机》192.168.1.245 (路由等)-》客户端 192.168.4.2 :4020  

请报告 今天数据(数据大请分帧)



3秒 内   客户端192.168.4.2 :4020 
 汇报  xxx-zzz 数据 (1-5)帧 / 10 (总帧 工具采集量决定不固定)


突然 网络中间交换机等其他原因,第六帧换 路由器 与 服务区 链接换 端口了。

192.168.1.2:2010 接收的《 交换机 《-192.168.1.245:3001(路由) 《- 192.168.4.2 :6010  汇报  xxx-zzz 数据 (5-10)帧 。

然后 服务器的 2000 一直挂在哪,不释放。
192.168.1.2:2010   接收的也不知道是谁的。



有些情况,网络延时、任务量大等, 通讯 会保存比较长的时间。
1、客户端一多,资源不释放,就拖死服务端。
2、端口改变了,前后已经收到的怎么处理,继续拼,等待(规定的时间)后放弃?
   前面的已经接收的数据如何释放。连接怎么自动释放。

3、等下个周期、再获取,【有些紧急事件不能及时处理】。
----------------------------------------------
-
作者:
男 keymark (嬲) ▲▲▲△△ -
普通会员
2019/5/3 10:51:52
6楼: 心跳不就是key and inc 吗?我理解错了?
----------------------------------------------
[alias]  co = clone --recurse-submodules  up = submodule update --init --recursiveupd = pullinfo = statusrest = reset --hard懒鬼提速https://www.cctry.com/>http://qalculate.github.io/downloads.htmlhttps://www.cctry.com/
作者:
男 xhl (xhl) ★☆☆☆☆ -
盒子活跃会员
2019/5/3 12:07:00
7楼: 你理解没错,
客户端是 单片机的东西,早期,单片机资源有限16M+64M容量, 
协议不完善,已经固定量产了, 现在改变不了。

今天把 代码
改了下
原来:
Len:=AContext.Connection.IOHandler.InputBuffer.Size;
AContext.Connection.IOHandler.ReadBytes(pRecvBuffer,Len,false); //ReadBytes  以前怎么写的,要读长度。

AContext.Connection.IOHandler.ReadBytes(pRecvBuffer,-1); 
//第二个参数使用-1表示接收所有长度。因为我们并不知道要接收的数据到底有多长

cpu 从80%+ 降到 15% -了。 有处理其他的时间了。
----------------------------------------------
-
作者:
男 keymark (嬲) ▲▲▲△△ -
普通会员
2019/5/3 14:07:44
8楼: tcp 来路 也有idx啊 系统给的    
          ??..??
难道我看了个假源码?
----------------------------------------------
[alias]  co = clone --recurse-submodules  up = submodule update --init --recursiveupd = pullinfo = statusrest = reset --hard懒鬼提速https://www.cctry.com/>http://qalculate.github.io/downloads.htmlhttps://www.cctry.com/
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行72.26563毫秒 RSS