请问send_fail可以到那里检查原因

Croesus

我是使用Linux Centos 6.5的环境,VM虚拟机,Workerman Gateway。

我在开启Status状态检查的时候,发现有send_fail的情况,由于传输都是本地网络,所以本地网络问题基本可以排除。请问我可以在那里检查日志,或是可以排查问题。这里先谢谢解答问题的大神。

6720 6 0
6个回答

walkor

有send fail  一般不是什么大问题,一般是由于客户端主动关闭连接导致的。

send_fail 有两种原因,
1、向客户端发送数据时发现客户端已经断开,由于是客户端主动断开的,属于正常现象,一般可以忽略

2、客户端接收缓冲区满,但是任然向客户端发送数据。比如浏览器最小化后浏览器自身一般不再接收websocket数据,导致数据积压在workerman的发送缓冲区(workerman为每个客户端建立了一个发送缓冲区),当缓冲数据达到上限值(TcpConnection::$maxSendBufferSize)后,这时候仍然有数据向这个客户端发送,那么便触发onError,send_fail计数加1。
参考:http://doc3.workerman.net/worker-development/on-buffer-full.html

  • 暂无评论
Croesus

谢谢回复,不过有尝试写着一个HTML5的小游戏,由服务器发送步骤1 - 步骤7,如果步骤2没有发送成功,那么前台直接由步骤1跳到步骤3,那么显示会很奇怪,请问有什么方式可以确认收到吗?收不到再发一次。

  • 暂无评论
walkor

如果连接不断开,是肯定会发送到的,这个是tcp的特性,要么发送到,要么断开,不会有部分数据发到了,部分数据没发到的情况。

  • 暂无评论
Croesus

我用的是websocket,请问也是同样的特性吗?因为我在自己写的日志,发现发送是发送不出去。所以想用一些方法确认发送到。

  • 暂无评论
walkor

websocket也是tcp的。一样的

  • 暂无评论
Croesus

我找到问题了,是我的Timer谢的不好有时会跳过一秒,谢谢帮忙解答。

  • nrsrlove 2020-09-21

    我的timer 倒数计时会跳秒数,比如从20调到18秒,不会是19秒。怎么办,有偿867558055

年代过于久远,无法发表回答
🔝