|
|
导航: |
论坛 -> 网络通讯
斑竹: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.
----------------------------------------------
- |
作者: |
|
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、 如何处理?? 多线程,以前没单独处理国,如何上手。 能段代码不。
----------------------------------------------
-
|
作者: |
|
2019/5/2 10:05:07 |
3楼: |
IdTCPServer本身就是多线程支持客户端的,不用你写什么啊。你只需要做你自己的处理就好了。
----------------------------------------------
-广袤璀璨的银河,永无止境的梦想(梦无止境游银河) 博客挂了……
|
作者: |
|
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、等下个周期、再获取,【有些紧急事件不能及时处理】。
----------------------------------------------
-
|
作者: |
|
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% -了。 有处理其他的时间了。
----------------------------------------------
-
|
作者: |
|
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/
|
|