>  기사  >  PHP 멀티플레이어 개발 환경의 원리에 대한 자세한 설명

PHP 멀티플레이어 개발 환경의 원리에 대한 자세한 설명

小云云
小云云원래의
2017-12-08 09:12:162648검색

PHP 개발자로서 혼자서 프로젝트나 기능을 완료할 수 없는 경우가 있습니다. 예를 들어 웨어하우스에 개발자가 1명 또는 20명 이상인 경우 코드 버전 제어 도구를 사용하여 각 사람이 서로 다른 모듈과 기능을 개발할 수 있습니다. code>git은 다른 브랜치를 열며, 프로세스는 먼저 로컬에서 완전한 환경을 설정하고 이를 개발하여 테스트 환경에 배포한 다음 자체 테스트 또는 테스터 테스트 후 시험판 환경에 배포하는 것입니다. 사전출시 기본적으로 온라인 환경과 동일하며, 이후 제품 검수를 거쳐 온라인으로 출고됩니다. 병렬로 개발되기 때문에 여러 기능이 동시에 승인되거나 테스트되는 상황이 있을 수밖에 없습니다. 이때 사전 출시 환경에서는 누구의 코드가 배포됩니까? A의 브랜치로 전환하면 B는 이를 수락할 수 없습니다. 따라서 우리는 모든 사람의 개발 프로세스가 서로 영향을 미치지 않는 다중 사용자 개발 환경이 있기를 바랍니다. 이 기사에서는 PHP 멀티플레이어 개발 환경의 원칙에 대한 분석을 공유하겠습니다. git 开不同的分支,流程大概是先在本地搭一套完整的环境,开发好部署在测试环境,自测或者测试人员测试好之后部署在预发布环境,预发布基本和线上环境一样,然后给产品验收,验收完成后再发布上线。由于是并行开发,肯定存在好几个功能同时验收或者测试的情况,这个时候预发环境到底部署谁的代码呢?切换到A的分支,B就不能验收了。所以希望存在一个多人开发环境,每个人的开发流程互不影响。本文我们就和大家分享php多人开发环境原理解析。

PHP运行原理

首先我们来分析下 PHP 的运行原理,看看 PHP 的语言特点。当我们从浏览器发起一个请求,我们的web服务器(NginxApache等)监听了80或者443端口,我们来看一个最简单的 Nginxvhost 配置:

server {
  listen       80;
  server_name test.com;
 
  root /data/gateway/html;
  index   index.php;

  location ~ \.php$ {
    fastcgi_pass   127.0.0.1:9001; #unix:/Users/run/php-fcgi.sock;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    include        fastcgi_params;
  }
}

Nginx 监听80端口,当匹配到用户访问的域名是test.com后使用对应的 vhost 配置。在服务器里PHP-FPM起一个服务,监听一个端口(比如9001)或者一个unix socket,Nginx通过fastcgi_pass配置,将请求传递给 PHP-FPM 来解析PHP代码,PHP解析器每次从index.php开始解析,一路处理下去、做一系列的逻辑处理、查询数据库或者缓存等操作,返回一个 HTML 或者其他结果给 NginxNginx 再返回给浏览器。流程如下图:

PHP 멀티플레이어 개발 환경의 원리에 대한 자세한 설명

  • CGI:是 NginxPHP_FPM 之间数据交换的一种协议。

  • FastCGI:同 CGI,是一种通信协议,但比 CGI 在效率上做了一些优化。

  • PHP-CGI:是 PHPNginx 提供的 CGI 协议的接口程序。

  • PHP-FPM:是 PHPNginx 提供的 FastCGI 协议的接口程序,额外还提供了相对智能一些任务管理。

多人开发环境

PHP 原理我们可以看到,PHP其实只是一个解释型的脚本语言,每次请求都要从index.php解析一次,那我们是不是可以在服务器根据不同开发者的名字,命名很多个文件夹,在各自文件夹里,clone 好代码仓库,切换到自己的分支。再让 Nginx 处理每个人目录下的index就可以了。比如直接访问http://wulv.test.com/,在 Nginx 获取到 wulv,把 root 设置到 wulv 这个目录,这样就访问到 wulv 这个目录下的代码了。可以让 Nginx 这样设置:

set $who www;
if ($http_who != "") {
   set $who $http_who;
}
root /data/gateway/$who/html;

我们可以让 URL 里携带用户的目录,在 Nginx 截取下来,可以在一下几个地方携带:

  • host: http://wulv.test.com

  • path: http://www.test.com/wulv

  • query: http://www.test.com?http_who=wulv

这样大体上可以实现需求了,但还是有点问题,比如页面里有些链接是写死的,没有使用相对路径,你一点击就又跑 www.test.com 去了,或者有些第三方应用比如 OAuth 等需要校验域名,你和线上域名不一致根本无法登陆。所以需要其他方式来实现,比如:

  • http request header

  • cookie

我们可以使用Modify Headers这个浏览器插件,修改http request 头信息,设置一个参数 http_whowulv,然后在 Nginx 获取。

拓展

如果有条件的话,其实还可以做一个网关服务器,做一个配置页面,在配置页面里配置一下需要访问的目录,下次访问,网关就直接帮你设置http header

PHP 작동 원리

먼저 PHP의 작동 원리를 분석하고 PHP의 언어 특성을 살펴보겠습니다. 브라우저에서 요청을 시작하면 웹 서버(Nginx, Apache 등)는 포트 80 또는 443을 수신합니다. 가장 간단한 Nginx를 살펴보겠습니다. vhost 구성:

server {
  listen       80;
  server_name test.com;
 
  root /data/gateway/html;
  index   index.php;

  location ~ \.php$ {
    fastcgi_pass   127.0.0.1:9001; #unix:/Users/run/php-fcgi.sock;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    include        fastcgi_params;
  }
}

Nginx는 포트 80을 수신하고 일치하면 사용자가 방문한 도메인 이름이 test입니다. com 해당 vhost 구성을 사용하세요. PHP-FPM은 서버에서 서비스를 시작하고 포트(예: 9001) 또는 unix 소켓을 수신합니다. Nginx는 fastcgi_pass를 통해 <code>PHP-FPM에 요청을 전달합니다. code> FPM 구성을 통해 PHP 파서는 매번 index.php에서 구문 분석을 시작하고 이를 처리하며 일련의 논리적 처리를 수행하고 데이터베이스를 쿼리합니다. 캐시 등을 처리하고 HTML을 반환하거나 다른 결과가 Nginx로 전송된 후 Nginx에 의해 브라우저로 반환됩니다. 프로세스는 다음과 같습니다: 🎜PHP 멀티플레이어 개발 환경의 원리에 대한 자세한 설명🎜
  • 🎜CGI: NginxPHP_FPM 교환에 관한 동의서입니다. 🎜
  • 🎜FastCGI: CGI와 동일하며 통신 프로토콜이지만 CGI 최적화보다 더 효율적입니다. . 🎜
  • 🎜PHP-CGI: Nginx용으로 PHP에서 제공하는 CGI 프로토콜입니다. > 인터페이스 프로그램. 🎜
  • 🎜PHP-FPM: Nginx용으로 PHP에서 제공하는 FastCGI 프로토콜입니다. > 인터페이스 프로그램은 비교적 지능적인 작업 관리 기능도 제공합니다. 🎜

다중 개발 환경

🎜 PHP의 원칙에서 우리는 PHP가 실제로 모든 요청을 해석하는 스크립트 언어라는 것을 알 수 있습니다. index.php에서 한 번 구문 분석하면 다양한 개발자의 이름에 따라 서버에 있는 여러 폴더의 이름을 지정할 수 있고 각 폴더에서 복제 OK 코드 저장소를 다음으로 전환할 수 있습니다. 자신의 지점. 그런 다음 Nginx가 모든 사람의 디렉터리에 있는 색인을 처리하도록 하세요. 예를 들어 http://wulv.test.com/를 직접 방문하여 Nginx에서 wulv를 가져온 다음 root를 입력합니다. code> <code>wulv 디렉터리에 있는 코드에 액세스할 수 있도록 wulv 디렉터리로 설정합니다. 다음과 같이 Nginx를 설정할 수 있습니다. 🎜
set $who www;
if ($http_who != "") {
   set $who $http_who;
}
root /data/gateway/$who/html;
🎜 URL이 사용자 디렉터리를 전달하도록 하고 이를 Nginx에서 가로챌 수 있습니다. 소수의 로컬 이식성: 🎜
  • 🎜호스트: http://wulv.test.com🎜
  • 🎜경로: http://www.test.com/wulv🎜
  • 🎜쿼리: http://www.test.com?http_who=wulv
🎜🎜 이는 일반적으로 요구 사항을 충족할 수 있지만 여전히 몇 가지 문제가 있습니다. 페이지가 하드코딩되어 있습니다. 상대 경로는 클릭하자마자 www.test.com으로 이동됩니다. >OAuth
에서 도메인 이름을 확인해야 합니다. 온라인 도메인 이름이 일치하지 않으면 전혀 로그인할 수 없습니다. 따라서 이를 달성하려면 다음과 같은 다른 방법이 필요합니다. 🎜
  • 🎜http 요청 헤더🎜
  • 🎜cookie🎜
🎜 헤더 수정 브라우저 플러그인을 사용하여 http 요청 헤더 정보를 수정하고 http_who 매개변수를 설정할 수 있습니다. code>를 <code>wulv로 변환한 다음 Nginx에서 가져옵니다. 🎜

확장

🎜조건이 허락한다면 실제로 게이트웨이 서버를 만들고 구성 페이지를 생성할 수 있습니다. 다음에 방문할 때 게이트웨이가 직접 액세스해야 할 디렉터리를 구성할 수 있습니다. http 헤더를 설정하고 해당 서버에 프록시를 설정하세요. 이런 방식으로 브라우저 플러그인을 설치할 필요도 없어 운영 및 제품 디자인에 더욱 친숙해졌습니다. 🎜🎜🎜🎜

PHP 세계 최고의 언어로 웹의 약 80%를 차지합니다. 중소기업에서는 기본적으로 lnmp 아키텍처를 사용합니다. 웨어하우스에 개발자가 1~20명이 넘으면 각자 다른 모듈과 기능을 개발할 수도 있고, git 같은 코드 버전 관리 도구를 사용해 서로 다른 브랜치를 개설하는 과정도 있을 것입니다. 먼저 로컬 환경을 개발하고 테스트 환경에서 배포합니다. 자체 테스트 또는 테스터 테스트를 거쳐 사전 릴리스 환경에 기본적으로 배포됩니다. 제품이 승인되면 승인이 완료되어 온라인으로 출시됩니다. PHP 作为世界上最“好”的语言,在web里占据着大概80%的份额,中小公司基本都说 lnmp 架构。当一个仓库开发人员大于1,20人的时候,每个人可能开发不同的模块和功能,用代码版本控制工具比如 git 开不同的分支,流程大概是先在本地搭一套完整的环境,开发好部署在测试环境,自测或者测试人员测试好之后部署在预发布环境,预发布基本和线上环境一样,然后给产品验收,验收完成后再发布上线。

由于是并行开发,肯定存在好几个功能同时验收或者测试的情况,这个时候预发环境到底部署谁的代码呢?切换到A的分支,B就不能验收了。所以希望存在一个多人开发环境,每个人的开发流程互不影响。

PHP运行原理

首先我们来分析下 PHP 的运行原理,看看 PHP 的语言特点。当我们从浏览器发起一个请求,我们的web服务器(NginxApache等)监听了80或者443端口,我们来看一个最简单的 Nginxvhost 配置:

server {
  listen       80;
  server_name test.com;
 
  root /data/gateway/html;
  index   index.php;

  location ~ \.php$ {
    fastcgi_pass   127.0.0.1:9001; #unix:/Users/run/php-fcgi.sock;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    include        fastcgi_params;
  }
}

Nginx 监听80端口,当匹配到用户访问的域名是test.com后使用对应的 vhost 配置。在服务器里PHP-FPM起一个服务,监听一个端口(比如9001)或者一个unix socket,Nginx通过fastcgi_pass配置,将请求传递给 PHP-FPM 来解析PHP代码,PHP解析器每次从index.php开始解析,一路处理下去、做一系列的逻辑处理、查询数据库或者缓存等操作,返回一个 HTML 或者其他结果给 NginxNginx 再返回给浏览器。流程如下图:

PHP 멀티플레이어 개발 환경의 원리에 대한 자세한 설명

  • CGI:是 NginxPHP_FPM 之间数据交换的一种协议。

  • FastCGI:同 CGI,是一种通信协议,但比 CGI 在效率上做了一些优化。

  • PHP-CGI:是 PHPNginx 提供的 CGI 协议的接口程序。

  • PHP-FPM:是 PHPNginx 提供的 FastCGI 协议的接口程序,额外还提供了相对智能一些任务管理。

多人开发环境

PHP 原理我们可以看到,PHP其实只是一个解释型的脚本语言,每次请求都要从index.php解析一次,那我们是不是可以在服务器根据不同开发者的名字,命名很多个文件夹,在各自文件夹里,clone 好代码仓库,切换到自己的分支。再让 Nginx 处理每个人目录下的index就可以了。比如直接访问http://wulv.test.com/,在 Nginx 获取到 wulv,把 root 设置到 wulv 这个目录,这样就访问到 wulv 这个目录下的代码了。可以让 Nginx 这样设置:

set $who www;
if ($http_who != "") {
   set $who $http_who;
}
root /data/gateway/$who/html;

我们可以让 URL 里携带用户的目录,在 Nginx 截取下来,可以在一下几个地方携带:

  • host: http://wulv.test.com

  • path: http://www.test.com/wulv

  • query: http://www.test.com?http_who=wulv

这样大体上可以实现需求了,但还是有点问题,比如页面里有些链接是写死的,没有使用相对路径,你一点击就又跑 www.test.com 去了,或者有些第三方应用比如 OAuth 等需要校验域名,你和线上域名不一致根本无法登陆。所以需要其他方式来实现,比如:

  • http request header

  • cookie

我们可以使用Modify Headers这个浏览器插件,修改http request 头信息,设置一个参数 http_whowulv,然后在 Nginx 获取。

拓展

如果有条件的话,其实还可以做一个网关服务器,做一个配置页面,在配置页面里配置一下需要访问的目录,下次访问,网关就直接帮你设置http header

병렬 개발로 인해 여러 기능이 동시에 승인되거나 테스트되는 상황이 있을 것입니다. 이때 사전 출시 환경에서는 어떤 코드가 배포됩니까? A의 브랜치로 전환하면 B는 이를 수락할 수 없습니다. 그러므로 우리는 모든 사람의 개발 프로세스가 서로에게 영향을 미치지 않는 다중 사용자 개발 환경이 있기를 바랍니다.

PHP 작동 원리

먼저 PHP의 작동 원리를 분석하고 PHP의 언어 특성을 살펴보겠습니다. 브라우저에서 요청을 시작하면 웹 서버(Nginx, Apache 등)는 포트 80 또는 443을 수신합니다. 가장 간단한 Nginx를 살펴보겠습니다. vhost 구성:

server {
  listen       80;
  server_name test.com;
 
  root /data/gateway/html;
  index   index.php;

  location ~ \.php$ {
    fastcgi_pass   127.0.0.1:9001; #unix:/Users/run/php-fcgi.sock;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    include        fastcgi_params;
  }
}
Nginx는 포트 80을 수신하고 일치하면 사용자가 방문한 도메인 이름이 test입니다. com 해당 vhost 구성을 사용하세요. PHP-FPM은 서버에서 서비스를 시작하고 포트(예: 9001) 또는 unix 소켓을 수신합니다. Nginx는 fastcgi_pass를 통해 <code>PHP-FPM에 요청을 전달합니다. code> FPM 구성을 통해 PHP 파서는 매번 index.php에서 구문 분석을 시작하고 이를 처리하며 일련의 논리적 처리를 수행하고 데이터베이스를 쿼리합니다. 캐시 등을 처리하고 HTML을 반환하거나 다른 결과가 Nginx로 전송된 후 Nginx에 의해 브라우저로 반환됩니다. 프로세스는 다음과 같습니다: PHP 멀티플레이어 개발 환경의 원리에 대한 자세한 설명🎜
  • 🎜CGI: NginxPHP_FPM 교환에 관한 동의서입니다. 🎜
  • 🎜FastCGI: CGI와 동일하며 통신 프로토콜이지만 CGI 최적화보다 더 효율적입니다. . 🎜
  • 🎜PHP-CGI: Nginx용으로 PHP에서 제공하는 CGI 프로토콜입니다. > 인터페이스 프로그램. 🎜
  • 🎜PHP-FPM: Nginx용으로 PHP에서 제공하는 FastCGI 프로토콜입니다. > 인터페이스 프로그램은 비교적 지능적인 작업 관리 기능도 제공합니다. 🎜

다중 개발 환경

🎜 PHP의 원칙에서 우리는 PHP가 실제로 모든 요청을 해석하는 스크립트 언어라는 것을 알 수 있습니다. index.php에서 한 번 구문 분석하면 다른 개발자의 이름에 따라 서버에 있는 여러 폴더의 이름을 지정할 수 있으며 각 폴더에서 복제 OK 코드 저장소를 다음으로 전환할 수 있습니다. 자신의 지점. 그런 다음 Nginx가 모든 사람의 디렉터리에 있는 색인을 처리하도록 하세요. 예를 들어 http://wulv.test.com/를 직접 방문하여 Nginx에서 wulv를 가져온 다음 root를 입력합니다. code> <code>wulv 디렉터리에 있는 코드에 액세스할 수 있도록 wulv 디렉터리로 설정합니다. 다음과 같이 Nginx를 설정할 수 있습니다: 🎜
set $who www;
if ($http_who != "") {
   set $who $http_who;
}
root /data/gateway/$who/html;
🎜 URL이 사용자 디렉터리를 전달하도록 하고 이를 Nginx에서 가로챌 수 있습니다. 소수의 로컬 이식성: 🎜
  • 🎜호스트: http://wulv.test.com🎜
  • 🎜경로: http://www.test.com/wulv🎜
  • 🎜쿼리: http://www.test.com?http_who=wulv
🎜🎜 이는 일반적으로 요구 사항을 충족할 수 있지만 여전히 몇 가지 문제가 있습니다. 페이지가 하드코딩되어 있습니다. 상대 경로는 클릭하자마자 www.test.com으로 이동됩니다. >OAuth
에서 도메인 이름을 확인해야 합니다. 온라인 도메인 이름이 일치하지 않으면 전혀 로그인할 수 없습니다. 따라서 이를 달성하려면 다음과 같은 다른 방법이 필요합니다. 🎜
  • 🎜http 요청 헤더🎜
  • 🎜cookie🎜
🎜 헤더 수정 브라우저 플러그인을 사용하여 http 요청 헤더 정보를 수정하고 http_who 매개변수를 설정할 수 있습니다. code>를 <code>wulv로 변환한 다음 Nginx에서 가져옵니다. 🎜

확장

🎜조건이 허락한다면 실제로 게이트웨이 서버를 만들고 구성 페이지를 생성할 수 있습니다. 다음에 방문할 때 게이트웨이가 직접 액세스해야 할 디렉터리를 구성할 수 있습니다. http 헤더를 설정하고 해당 서버에 프록시를 설정하세요. 이런 방식으로 브라우저 플러그인을 설치할 필요도 없어 운영 및 제품 설계에 더욱 친숙해졌습니다. 🎜🎜관련 추천 : 🎜🎜🎜php 중국 웹사이트, phpstudy 통합 개발 환경 인수, 국내 최다 사용자 공개🎜🎜

php 통합 개발 환경 백과사전

JSP 개발 환경 구축 방법


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.