建议在 TcpConnection 类中判断自定义协议 decode 方法的返回是否为false, 决定是否调用 onMessage 回调

0

想提交 PullRequest, 作者又说github不给国内用, 只能发在这里.
希望能接纳.


如果没有这个功能, 只能在协议 decode 方法中返回false, 在 onMessage 回调中再做判断, 这样的话 onMessage 回调函数要做参数类型约束, 就不好做了.


\call_user_func($this->onMessage, $this, $parser::decode($one_request_buffer, $this));

修改为


if(false !== $decodeResult = $parser::decode($one_request_buffer, $this))
{
\call_user_func($this->onMessage, $this, $decodeResult);
}
已邀请:

walkor

赞同来自:

底层框架不好做这个事情,这样会导致类似丢包的问题。会有一大批开发者过来问为什么前端发送了消息,后端onMessage没触发。而且有些业务是需要处理false这种情况的,直接忽略也不妥。如果你需要类似的功能建议直接在onMessage里封装一层,先判断是否为false,然后再决定是否调用你真正的处理函数。

mgzhenhong

赞同来自:

谢谢回复, 我现在就是这样做的.


$server->onMessage = function(TcpConnection $conn, $request)
{
if($request === false) return;
$response = Processor::Run($request, 'http');
$conn->send($response);
};

要回复问题请先登录注册