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

mgzhenhong

想提交 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);
}
阅读 945
2个回答

walkor

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

  • 暂无评论
mgzhenhong

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

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