xuanqust 2023-07-03 09:52 采纳率: 0%
浏览 24

关于dotnetty服务器转发问题。

我通过dotnetty(C#)写了个服务器,主要功能是A,B客户端连接之后,A客户端发送信息经服务器转发给B客户端。

发送消息代码:

int count = 0;
            while (count<40)
            {

                    count += 1;
                    byte[] bt = new byte[0];
                 
                    byte[] buffer = Encoding.UTF8.GetBytes("hello");
                    int receive = socketSend.Send(buffer);
                    Thread.Sleep(300)
            }

上述代码是A客户端发送消息代码,发送频率控制再一秒3次左右,经服务器到B客户端没有问题,如果设置成Thread.Sleep(30),每秒30次左右。 发送5次左右之后,A客户端就掉线了,错误定位怎么还显示在int receive = socketSend.Send(buffer); 这一行? , 请教啥原因呢?是因为接受或发送缓冲区问题么?

补充:只有A客户端上线,B客户端不上线,每秒发送30次左右的数据,A客户端也正常,不掉线。

  • 写回答

1条回答 默认 最新

  • 桑榆肖物 全栈领域新星创作者 2023-07-03 10:14
    关注

    这种使用 while 循环的写法存在一个潜在的问题,当发送的消息数量超过一定限制时,可能导致 A 客户端掉线。循环过程中发送消息的频率过高,超过了系统处理的能力,从而导致一些异常情况发生。
    发送操作 socketSend.Send(buffer) 可能会阻塞当前线程,并等待发送完成。在这种情况下,如果发送的速度过快,服务器的发送缓冲区可能会溢出,或者网络延迟导致发送队列过长,最终导致客户端掉线。
    你可以试试其他框架,或者自己写,改为异步处理

    评论 编辑记录

报告相同问题?

问题事件

  • 修改了问题 7月3日
  • 创建了问题 7月3日

悬赏问题

  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 下图接收小电路,谁知道原理
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测