Gateway/BusinessWorker不支持非websocket协议吗?

zyuyou

由于历史原因,我需要在Gateway/BusinessWorker模式中提供http协议访问(应该说是类似于http的请求接口),现有workerman虽然是支持的,但是在BusinessWorker中却将$_SERVER全局变量重置了, 这样导致http协议解析到数据丢失了, 最后Event虽然可以得到消息的body,这时需要解析这个body。我想问一下,为什么BusinessWorker中要将$_SERVER重置, 而不是继续添加需要的数据,这样有什么考虑吗?

3345 1 0
1个回答

walkor

BusinessWorker并没有解析http协议,即使不重置$_SERVER,$_SERVER也是空的,所以不存在所说的 “$_SERVER全局变量重置, 导致http协议解析到数据丢失” 问题。

Http协议decode返回值是原始的http协议数据,所以Event::onMessage($client_id, $data) 中得到的$data就是http原始数据。

我已经更改了http协议decode的返回值为 return array('get'=>$_GET, 'post'=>$_POST, 'cookie'=>$_COOKIE, 'server'=>$_SERVER, 'files'=>$_FILES);

这样你就可以在Event::onMessage($client_id, $data)的$data中获取 get/post/cookie....了

请更新下workerman试下

  • zyuyou 2015-05-06

    非常感谢, 我试一下

  • zyuyou 2015-05-06

    @1 composer的包好像没有更新

  • zyuyou 2015-05-06

    时间关系, 我已经fork仓库,并提交自己的composer包来测试。可用, 再次感谢您的回答!

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