BeWithYou

胡搞的技术博客

  1. 首页
  2. PHP
  3. swoole的HTTP服务踩坑

swoole的HTTP服务踩坑


最近玩了球球大作战,他抄袭的是agar.io。游戏逻辑还是蛮简单的,所以找了一个源码看了一下。
参考网上agar.io的开源复刻版代码,我打算用php重写个后端逻辑玩玩。
因为不想配nginx规则,所以直接用swoole的HTTP服务搭一个HTTP Service,但是页面打开以后发现css文件无法解析,但是请求都是200。
猜是响应头的Content-Type可能有问题,于是改动服务端逻辑,强制吐出头部。解决了问题。

$http = new \swoole_http_server("0.0.0.0", getConf("http_port"));
$http->set(array(
    'worker_num' => 1,   //工作进程数量
));
$http->on('request', function ($request, $response) {
    if($request->server['request_uri'] == "/"){
        $response->end(file_get_contents(STATIC_PATH."/index.html"));
    }elseif(file_exists(STATIC_PATH.$request->server['request_uri'])){
        switch(pathinfo(STATIC_PATH.$request->server['request_uri'], PATHINFO_EXTENSION)){
            case "html":
                $response->header("Content-Type","text/html;charset=utf-8");
                break;
            case "js":
                $response->header("Content-Type","application/x-javascript");
                break;
            case "mp3":
                $response->header("Content-Type","audio/mpeg");
                break;
            case "css":
                $response->header("Content-Type","text/css");
                break;
            case "png":
                $response->header("Content-Type","image/png");
                break;
        }
        $response->end(file_get_contents(STATIC_PATH.$request->server['request_uri']));
    }else{

    }
});
$http->start();

swoole的HTTP服务做得很粗糙,最好还是结合nginx使用。用swoole的话,还是做应用服务比较合适。

回到顶部