Closed ss002012 closed 1 week ago
是的 有bug buf是循环使用的 所以必须在本次函数调用时用完 不能缓存延后使用
不过现在可以把buf设置为空 底层能感知到 就会重新申请buffer,改成这样即可:
virtual void onRecv(const Buffer::Ptr &buf) override{
//处理客户端发送过来的数据
TraceL << buf->data() << " from port:" << get_local_port();
send(buf);
const_cast<Buffer::Ptr &>(buf).reset();
}
求指导下底层是如何感知的。我目前看到的是在attachEvent时获取的,只有这一次会判断是否为空,之后就都是使用获取的了,不知道哪个地方会再次判断呢?
是的 有bug buf是循环使用的 所以必须在本次函数调用时用完 不能缓存延后使用
这个buf可以设置成不循环使用吗?
buf每次接收前memset下0
buf每次接收前memset下0
我认为memset为0是没有用的 因为使用的是指针,大家都指向一块数据;感觉比较可靠的做法应该是新创建一个buffer并拷贝接受到的数据再进行处理。
求指导下底层是如何感知的。我目前看到的是在attachEvent时获取的,只有这一次会判断是否为空,之后就都是使用获取的了,不知道哪个地方会再次判断呢?
你更新下zltoolkit,这个感知特性是新加的
代码在这:
求指导下底层是如何感知的。我目前看到的是在attachEvent时获取的,只有这一次会判断是否为空,之后就都是使用获取的了,不知道哪个地方会再次判断呢?
你更新下zltoolkit,这个感知特性是新加的
多谢。
在该例子的onRecv函数如下,但是buf不应该被保留,而应该立刻使用,否则后面buf的数据发生变化就会对下面的send(buf)产生影响,而send(buf)是可能保留这个buf的,这样使用是不是有问题?