>  기사  >  백엔드 개발  >  기술적 분석을 사용하여 기존 오픈소스 소셜 플랫폼인 ThinkSNS에 경의를 표합니다.

기술적 분석을 사용하여 기존 오픈소스 소셜 플랫폼인 ThinkSNS에 경의를 표합니다.

WBOY
WBOY원래의
2016-07-25 08:43:40953검색
저는 IT 오타쿠이고, 고등학교 때부터 SNS 활동을 시작했습니다. 지난 7, 8년은 미소, 땀, 슬픔 등 SNS를 통한 사교 활동에 소비됐다. 빛을 받으러 나갈 때 사진을 몇 장 찍어서 SNS에 공유하고, 사회에 해를 끼치는 행동을 접하면 마음속에 작은 감동이 있으면 SNS에 공개하겠습니다. SNS에 올려서 널리 알리세요. 점차적으로 나는 SNS에서 뜬금없는 농담을 찾아보고, 유명 작가들의 SNS에서 문학적, 예술적 재능을 얻고, IT 재벌들의 SNS에서 업계 동향과 신선한 지식을 흡수하는 데 익숙해졌습니다. 수많은 SNS 소셜 시스템 중 제가 처음 접한 오픈소스 소셜 SNS는 web2.0 버전을 기반으로 개발된 ThinkSNS였습니다.
인터넷 검색을 통해 Zhihu와 같은 관련 사이트에 ThinkSNS에 대한 전문적인 기술 정보가 상대적으로 적다는 것을 알게 되었습니다. 많은 프로그래머들이 ThinkSNS에 대한 기술 문서를 검색하고 싶어하지만 얻을 수 없습니다. 그래서 ThinkSNS를 좋아하는 많은 기업가들과 공유하고, 개발자들에게도 기술적 인사이트를 제공하고자 ThinkSNS 기술에 대한 글을 작성하게 되었습니다.
  1. 우리가 흔히 말하는 TS는 무엇인가요?
먼저 TS가 무엇인지 알아보겠습니다. TS는 "ThinkSNS"의 약자입니다. 그것을 TSer라고 부르세요. TS는 오픈 소스 프로그램이며 코드 호스팅 플랫폼은 GitHub입니다. 모든 세부 수정 사항은 투명하게 업데이트됩니다.
사용자는 공식 웹사이트(http://www.thinksns.com)와 공식 데모 커뮤니티(데모 사이트 http://demo.thinksns.com) 및 GitHub 저장소( https://github.com/medz/ThinkSNS-4) TS의 최신 개발 동향을 받아보세요~ 물론 관심이 있으신 분은 개발자가 TS 개발자에게 Pull requesTS(약칭 PR) 코드를 받아보실 수도 있습니다. 코드가 오픈 소스 요구 사항을 충족하면 TS 버전으로 병합됩니다. 일반 사용자가 문제를 겪을 경우 데모 사이트나 Github에 문제를 제출하면 개발자로부터 통일된 응답을 받을 수 있습니다.
TS는 PHP 버전에 대한 요구 사항이 상대적으로 낮고, 기초 산업은 php5.5나 php5.6 단계에 진입했습니다~ 하지만 국내 틈새 가상 호스트 대부분이 관련 전문 지식을 모르는 경우가 많다는 점을 고려하면 여러분 그래서 TS에서는 php 버전을 php5.3.12로 낮췄습니다~ 물론 왜 마이너 버전이 12인지 생각하시는 분들도 계십니다. 이 버전이 php5.3의 최초 안정 버전입니다~ 즉 이번 마이너 버전 이전의 버전들은 버전이 불안정하므로 설치 및 사용을 권장하지 않습니다.
2. Laravel프레임워크Eloquent ORM TP 프레임워크
TS는 2016년 개발 과정에서 상대적으로 큰 기본 아키텍처 변경을 수행했습니다. 우리 모두 알고 있듯이 TS의 최하위 계층은 2차 수정을 위해 ThinkPHP 프레임워크를 기반으로 합니다. 사용자가 ThinkPHP 기반 TS를 직접 업그레이드할 수 없는 주요 이유 중 하나는 TP 프레임워크가 MIT 오픈 소스 프로토콜을 완전히 준수하지 않기 때문입니다. 물론 개발자 입장에서는 TP 프레임워크 기술 아키텍처 자체도 충분히 발전되지 않고 너무 추상적인 문제를 안고 있습니다. 따라서 종합적인 고려 끝에 TS는 데이터 교환을 위해 Laravel 프레임워크의 Eloquent ORM을 사용합니다.
Eloquent ORM의 장점은 무엇인가요? 이 ORM의 데이터 처리는 Node.js의 데이터 처리와 유사합니다. 즉, 모든 것이 객체이고 ORM의 데이터 관계 처리 효율성은 교리보다 열등하지 않기 때문에 TS가 이런 방식을 선택한 것입니다. 물론, 앞으로 더욱 발전된 아키텍처를 준비하는 것이 더 많은 고려 사항입니다. TS는 개발을 위해 점진적으로 확장 방식을 채택하고 전체 TS 프로그램에 대한 아키텍처 데이터 교환을 수행할 예정입니다.
새로운 ORM의 도입으로 TS는 php7 플랫폼에서의 실행을 고려할 수 있게 되었지만 php7에서는 MySQL 연결 방식을 완전히 삭제하고 PDO와 MySQLi만 남았습니다. 그런 다음 php7 환경에서 실행하려면 DB 클래스를 다시 수정해야 합니다. 그러나 호환성 문제를 고려하면 현재 이전 애플리케이션에서는 여전히 모델에서 SQL을 생성한 후 SQL을 전달합니다. 실행을 위해 PDO로 넘어갑니다. 새로 개발된 애플리케이션과 기능은 모두 새로운 ORM 데이터를 사용해 개발되었습니다.
3. TS기술적 장점과 확장성
새로운 ORM을 도입하는 것 외에도 TS에는 더 쉽게 이해하고 통합할 수 있는 기본 클래스가 있는 것과 같은 많은 기술적 이점이 있습니다. 이러한 기본 클래스는 타사 라이브러리를 기반으로 다시 캡슐화되므로 TS 모듈 개발에 설정된 속성이 더욱 표준화되고 개발 시작이 더 쉬워집니다. 개발자가 타사 클래스를 통합하기 위해 상속 및 기타 작업을 수행하는 경우 국가 상황에 따라 이는 거의 불가능하기 때문입니다. 이를 바탕으로 개발자는 타사 클래스를 배울 필요 없이 통합 후 수행해야 할 작업을 알기 위해 기본 클래스만 보면 됩니다.
TS(현재 애플리케이션)의 새로운 확장에서는 원래 정적 리소스가 애플리케이션 아래의 리소스를 직접 참조합니다. 새 아키텍처에서는 TS 애플리케이션이 외부 호출을 용이하게 하기 위해 공용 캐시 디렉터리로 균일하게 이동됩니다. . 이 설계는 TS를 더욱 안전하게 만들기 위한 것입니다. 이를 통해 사용자는 코드를 노출하지 않고도 애플리케이션에 내장된 정적 리소스를 얻을 수 있으며, 웹마스터나 개발자는 노출된 디렉터리의 상위 계층에 비공개 코드를 보다 안전하게 보관하고 숨길 수 있습니다.
그렇다면 TS에는 어떤 구체적인 기능이 있나요? 이 문제는 기본적으로 의견의 문제입니다. TS는 올인원이기 때문에 핵심 소셜 기능 외에도 그림과 같이 마이크로바, 채널, 정보, 액티비티, 쇼핑몰 등 다양한 산업 속성을 지닌 많은 TS 협력 제품도 보유하고 있습니다. :
기술적 분석을 사용하여 기존 오픈소스 소셜 플랫폼인 ThinkSNS에 경의를 표합니다.
4. SNS의 핵심은 채팅과 트렌드
TS는 자체 개발한 네이티브 인스턴트 채팅 시스템을 보유하고 있습니다. . 우리는 채팅과 방향이 사회적 상호작용의 핵심이라는 것을 알고 있습니다. PC에서 TS는 JS 폴링을 사용하여 모바일 단말기에서 메시지 수신 및 기타 작업을 구현합니다. TS는 사용자 기록이 손실되지 않도록 하고 P2P 지점 간 전송을 방지하기 위해 고급 기술을 사용합니다. 프로그램은 클라이언트에 의해 실행됩니다. 클라이언트는 메시지를 서버에 푸시하고, 서버는 메시지를 다른 클라이언트에 전달하여 데이터베이스에 저장하여 여러 클라이언트에서 동시에 도착한다는 목표를 달성합니다.
5. TS
의 기본 기술 포인트 실용적인 정보가 없는 분석은 훌리건에 불과합니다. 다음으로 TS의 기본적인 기술 포인트에 대해 말씀드리겠습니다. TS에서 애플리케이션에는 구성 파일이 있습니다. 현재 애플리케이션 디렉터리는 apps/입니다. 따라서 구성 파일은 "apps//manage.json"입니다.
기술적 분석을 사용하여 기존 오픈소스 소셜 플랫폼인 ThinkSNS에 경의를 표합니다.
이는 비교적 새로운 애플리케이션 구성임을 알 수 있습니다. 이전 애플리케이션에서는 "리소스" 항목만 구성하면 정적 리소스가 캐시됩니다. "storage" /app/<앱 이름>"에서 개발자 모드를 설정하면 접근할 때마다 여기로 이동하게 됩니다. 따라서 Storage/app 디렉터리는 공개적으로 노출되는 디렉터리입니다.
위의 내용을 달성하려면 새 애플리케이션 설치 클래스를 언급해야 합니다. 네임스페이스는 TSHelperAppInstall입니다. 새 애플리케이션 메커니즘(현재 정적 리소스 캐싱)에서 일부 처리가 수행되었으며 애플리케이션 실행기도 있습니다. 이 네임스페이스에서 "TSHelperController" 실시간 실행기는 앱 이름, 컨트롤러 이름 및 작업 이름만 전달하면 됩니다. 실행기는 필수 컨트롤러 코드를 실행하기 위해 Composer를 통해 애플리케이션에 등록된 네임스페이스를 찾습니다.
그런데 중요한 기술 추가 사항을 언급해야 하는데, 바로 Composer 패키지 관리 도구입니다. Composer는 모든 언어 패키지 관리 도구 중 최고의 도구라고 할 수 있습니다. 이는 타사 패키지의 표준화된 통합, 업그레이드 및 제거는 물론 PSR-0 및 PSR-4 사양을 준수하는 AutoLoader 도구도 제공합니다. 이렇게 하면 필요한 클래스 파일과 라이브러리 파일을 찾기 위해 TS에서 중복된 사용자 지정 자동 로딩이 필요하지 않으며 Composer를 사용하여 직접 등록할 수 있습니다. 가장 간단한 예를 들어 설명하겠습니다.
TS 개발팀이 새로운 웹 애플리케이션을 개발하고 있는 것으로 이해됩니다. 중요한 코드는 apps//src 디렉토리에 있습니다. TS는 클래스 사용자 정의의 디렉토리 위치를 어떻게 찾을 수 있습니까? 말하자면, 애플리케이션에서 지정한 네임스페이스를 알아야 합니다. 애플리케이션에는 네임스페이스에 대한 요구 사항이 없습니다. 컨트롤러의 네임스페이스는 "App"으로 지정됩니다. 매개변수는 애플리케이션의 컨트롤러를 찾는 데 편리합니다. 물론 이는 일시적일 뿐입니다. 앞으로 TS 개발에는 네임스페이스와 같은 기술적 요구 사항만 필요하지 않습니다. 라우터를 등록하려면 TS가 적극적으로 컨트롤러를 검색하는 대신 사용되는 모든 항목을 미리 등록해야 하며 이는 고급 기술 요구 사항을 준수합니다.
다시 본론으로 돌아가서, TS는 컨트롤러를 어떻게 찾았나요?
사실 TS가 하는 일은 매우 간단합니다. "앱" 클래스를 생성한 다음 이 클래스를 애플리케이션 개발 중에 등록합니다. 자동으로 로딩됩니다. 이 애플리케이션의 표준은 PSR-4이므로 src 디렉터리뿐만 아니라 어떤 디렉터리에도 코드를 넣을 수 있습니다. 이 디렉터리는 TS 프로그램에 알려지지 않았지만 Composer는 이를 알고 있으므로 TS는 Composer에게 "물어보기"만 하면 됩니다. 사용 가능.
이 신기술의 도입으로 무거운 개발 작업이 줄어들 뿐만 아니라 TS 코드가 더욱 단순해졌습니다. 더 이상 TS 코드 자체와 관련 없는 것에는 신경 쓰지 않고 개발에만 집중하면 되기 때문입니다. 우리 자신의 코드 부분. 그러면 타사 라이브러리를 제외한 TS 코드 패키지가 작년에 24MB에서 현재 21MB로 줄었습니다. 왜 여전히 그렇게 큰가요? TS는 새로운 기술을 사용하면서 기존 모듈의 작동 요구 사항을 고려해야 하기 때문에 모든 기존 모듈을 재개발할 필요가 없기 때문에 지금은 할 수 있는 일이 없습니다. 아이를 낳은 뒤, 아이가 못생기면 그냥 싸매고 새 아이를 낳아야 한다고 항상 말할 수는 없습니다!
TS 변화의 초점은 ORM 추가인데, 새로운 데이터 모델은 어떻게 활용하나요? 기본 상속 코드는 다음과 같습니다.
기술적 분석을 사용하여 기존 오픈소스 소셜 플랫폼인 ThinkSNS에 경의를 표합니다.
네, 주석은 20줄만 있으면 됩니다. 이전 모델 상속과 차이점이 무엇인가요? 한 가지 차이점은 전달된 매개변수의 변경에 있습니다. ORM은 MySQL, SqlLite, SQL 서버 및 기타 데이터베이스 간의 자유로운 전환을 지원합니다. 또 다른 차이점은 정의된 키워드를 변경한다는 점입니다. 모델이 정의되면 테이블에서 자주 작업할 수 있습니다. 매우 간단하지 않나요? 위 테이블에서 Feed_id가 1인 데이터 조각을 쿼리하는 것은 매우 간단합니다. Feed::find(1)입니다. 좋습니다. 쿼리가 완료되었습니다. 물론 반환되는 것은 순수 데이터 배열이 아닌 객체입니다.
이를 원하는 배열로 바꾸려면(예를 들어 $feed가 위 쿼리에서 반환된 데이터인 경우) $feed->toArray()만 있으면 됩니다. 테이블의 필드를 알 수 있으면 $feed->feed_id 또는 $feed->cTime과 같은 객체 멤버로 쿼리된 데이터를 직접 읽거나 이 객체를 foreach에 직접 전달할 수 있습니다. 이를 통해 새로운 ORM은 데이터를 처리할 때 이전처럼 배열에서 작동할 필요가 없지만 이전 기준으로 순회를 변경하지 않고 유지할 수 있음을 알 수 있습니다.
물론, 보다 구체적인 용도에 대해서는 Laravel 프레임워크의 공식 문서를 확인하고 ORM의 관계에 대한 또 다른 예를 제시할 수 있습니다.
공용 기능전화()
{
return $this->hasOne('Phone');
}
위 방법으로 이러한 방법을 정의하고 Phone 모델을 일대일로 연결합니다. $data = Feed::find(1)->phone 기본 키인 Feed_id를 동일하게 얻을 수 있습니다. 피드 테이블 값의 테이블 개체입니다. 매우 편리하지 않습니까?
마지막으로 컨트롤러에 대해 이야기해 보겠습니다. "TSBaseNoneController"라는 기본 클래스가 TS에 캡슐화되어 있습니다. 컨트롤러 아래에 "AppControllerNone" 컨트롤러 클래스를 정의하고 이 NoneController 개체를 상속합니다. 그런 다음 애플리케이션이 존재하지 않는 컨트롤러에 액세스하면 이 컨트롤러로 리디렉션됩니다. 그러므로 이것을 이용하면 예상치 못한 많은 방법을 개발할 수 있습니다. 이 글의 소개를 통해 TS를 정말 이해하셨나요? 이것은 TS의 드문 부분이지만 무시할 수는 없습니다.
TS는 기업가들에게 힘과 속도를 더하기 위해 성장하며 최선을 다하고 있습니다. 요약: TS는 고급 아키텍처를 갖추고 있으며 코드는 PSR 사양을 준수하고 사용이 간편하며 호환성이 높습니다. 기업가는 비즈니스 요구 사항에 맞게 TS를 쉽게 조정할 수 있으며 개발자는 매우 쉽게 시작할 수 있습니다. 짧은 시간. 기술자와 기업가에게 시간은 가장 비싼 비용입니다. ThinkSNS의 희망과 목적은 기업가와 개발자가 해야 할 일에 집중할 수 있도록 하는 것입니다.
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.