求助 Indy TcpServer 发送数据问题

zsy_good 2008-08-01 09:35:13
我的TcpServer同时有多个客户连接上来

如果所有客户的网络速度都比较快,那不会有任何问题。


一旦有一个网络速度很慢的用户上来,会导致其他所有用户速度慢下来,他一退出,其他用户都正常了。
try
videoheard.Flag := packflag;
if (Athread.Connection <> nil) and (Athread.Connection.Connected) then
begin
Athread.Connection.OpenWriteBuffer();
Athread.Connection.WriteBuffer(videoheard,sizeof(videoheard));
Athread.Connection.WriteBuffer(buf,bufsize);
Athread.Connection.CloseWriteBuffer();
end;
finally
end;

我觉得是不是这个WriteBuffer,没有在线程中发送 ? 还在主线程,所以他返回慢,就其他都很慢了?
有什么办法解决吗?
...全文
192 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
zsy_good 2008-08-01
  • 打赏
  • 举报
回复
有人可以帮忙吗
zsy_good 2008-08-01
  • 打赏
  • 举报
回复
我的测试
Athread.Connection.OpenWriteBuffer();
vTickCount := GetTickCount;
Athread.Connection.WriteBuffer(videoheard,sizeof(videoheard));
Athread.Connection.WriteBuffer(buf,bufsize);
addtipinfo(IntToStr(GetTickCount - vTickCount));
Athread.Connection.CloseWriteBuffer();

发现writebuffer非常快,慢在closewritebuffer上面

于是我修改如下

vTickCount := GetTickCount;
stream.WriteBuffer(videoheard,sizeof(videoheard));
stream.WriteBuffer(buf,bufsize);
stream.Position := 0;
Athread.Connection.WriteBuffer(stream.memory^,stream.size);
addtipinfo(IntToStr(GetTickCount - vTickCount));
结果writebuffer慢了。。。。

怎么办?
zsy_good 2008-08-01
  • 打赏
  • 举报
回复
WriteBuffer 能不能瞬间执行完毕,不等待?

这样就不会卡住了!
7年 2008-08-01
  • 打赏
  • 举报
回复
帮顶了.

1,593

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧