Spotify 데스크톱 애플리케이션을 개발하는 데 어떤 언어 또는 기술이 사용 되었습니까?
Spotify 데스크톱 응용 프로그램을 개발하는 데 사용 된 언어 또는 기술을 아는 사람이 있습니까? 안정적이고보기 좋으며 가볍습니다.
여기에서 : http://www.quora.com/What-is-the-technology-behind-the-Spotify-desktop-app
날짜 : 2014-09-09
Andreas Blixt, Spotify 5 년 직원 :
모든 클라이언트의 핵심은 C ++이지만, 그 핵심은 Rasmus의 포스트가 압축 된 이후로 기능이 모듈로 분리되어 있습니다. Spotify가 점점 더 많은 플랫폼에서 사용 가능 해지고 더 풍부한 기능 세트가 제공됨에 따라 "핵심"이 "조금 모든 것"이되지 않도록해야합니다. 이것은 재생 제어와 같은 특정 기능을 별도의 모듈로 분리하는 것을 의미합니다. 이러한 모듈은 여전히 C ++이지만 논리를 이론적으로 다른 언어로 구현할 수있을만큼 충분히 독립적입니다. 우리는 이러한 모듈에 대한 인터페이스 레이어를 "Cosmos"라고 부르며 HTTP와 크게 다르지 않은 방식으로 작동합니다. Cosmos를 사용하면 클라이언트의 모든 부분이 임의의 경로 및 페이로드를 사용하여 모듈과 통신 할 수 있으므로 훨씬 더 유연한 아키텍처가 가능합니다. 몇 가지 명백한 이점은 버전이 지정된 인터페이스 (예 : GET sp : // player / v1 / main이 플레이어 상태를 반환 함)와 데이터 전달을위한 JSON입니다. 이것은 데스크탑 클라이언트의 또 다른 변경에 중요합니다.
오늘날 우리의 많은 데스크톱 UI는 실제로 CEF (Chromium Embedded Framework)를 사용하고 있습니다. 이는 기본적으로 뷰가 JavaScript, HTML 및 CSS로 구동된다는 것을 의미합니다. 우리의 모든 기능 팀이 다른 사람의 시각을 깨는 것을 두려워하지 않고 자신의 기능에 대해 작업 할 수 있도록 각 뷰는 자체 "브라우저"에서 샌드 박스로 처리됩니다 (더 많은 내용을 표시하는 것을 제외하고는 Chrome에서 뷰를 탭으로 생각할 수 있습니다. 한 번에 하나씩). 하지만 한 가지 제한이 따릅니다. 뷰간에 데이터를 공유하는 것이 더 어려워집니다. 여기가 Cosmos가 등장하고 코어 (C ++)와 JavaScript 영역 간의 통신을 실제로 단순화합니다. JS 클라이언트는 임의의 요청을 할 수 있으며 바인딩이 있으면 해당 요청이 처리되고 응답됩니다. 한 가지 예는 "메시지"입니다. 모든 뷰가 수신중인 다른 뷰로 JSON 데이터를 푸시 할 수 있도록하는 엔드 포인트 (이것이 C ++ 모듈과 인터페이스 할 수 있다는 점을 제외하면 HTML5의 window.postMessage와 같은 종류). 이것은 또한 클라이언트의 모든 재생 버튼이 트랙이 재생 중인지 여부, 오프라인에서 사용할 수 있는지 (다른 Cosmos 모듈) 또는 음악에 노래를 저장했는지 여부를 확인하는 방법입니다.
기술 스택에 대한 또 다른 중요한 변경 사항은 일부 로직을 뷰 집계 서비스로 "뒤로"이동했다는 것입니다. 따라서 이전에는 클라이언트에서 거의 모든 논리를 수행하고 백엔드를 데이터 저장소로만 사용했지만 이제는 데이터 저장소와 클라이언트 사이의 논리 계층에서 훨씬 더 많은 작업을 수행하여 Cosmos와 매우 유사한 엔드 포인트를 노출합니다 (사실, Cosmos 모듈을 호출하는 것과 똑같은 방식으로 백엔드를 호출 할 수 있으므로 레이어 간 이동이 번거롭지 않습니다.) 그 이유는 두 가지입니다. 하나는 구현할 클라이언트 로직이 적기 때문에 더 많은 플랫폼으로 더 빠르게 확장 할 수 있고, 두 번째는 클라이언트가 더 일관되고 최신 상태로 유지하는 데 도움이됩니다. 더 "어리석은".
다음은 이들이 사용하는 타사 구성 요소 목록입니다 (물론 C ++ 위에).
- 후원
- Expat
- FastDelegate
- giflib
- libjpeg
- libogg
- libvorbis
- 메르 센 트위스터
- zlib
- NSIS (Windows 만 해당)
- Windows 템플릿 라이브러리 (Windows에만 해당)
- Growl (Max OS X 만 해당)
- MATrackingArea (Mac OS X 만 해당)
Spotify 디자이너에 따르면 :
http://twitter.com/#!/tobiasahlin/status/96483609799692288
"일부는 C ++로, 일부는 Spider라고하는 HTML 같은 마크 업 언어로되어 있습니다." "Spotify 내에서만 사용하도록 제작되었습니다."
Spotify는 이제 CEF ( Chromium Embedded Framework )를 사용하여 데스크톱 애플리케이션 내에서 HTML / CSS / JavaScript로 구성된 웹 인터페이스를 표시합니다.
자신의 웹 사이트 :
Spotify는 대부분 Python 및 C ++로 빌드되었습니다.
Windows에서 실행되고 있고 .NET (프로세스 탐색기가 나에게 알려줍니다)이 아니라 AIR 설치 프로세스를 따르지 않았다는 점을 감안할 때 크로스 플랫폼 라이브러리를 사용하는 C ++라고 말하고 싶습니다.
모든 것이 하나의 실행 파일로 컴파일되어 모든 종속성의 소스에 액세스 할 수 있음을 나타냅니다.
Wrt to Techno ... 난 그들이 Hardhouse Electronica를 사용한 것 같아요
여기에서 첫 번째 답변을 확인하십시오 : https://www.quora.com/What-is-the-technology-stack-behind-the-Spotify-web-client
Spotify의 전 기술 책임자 인 Andreas Blixt가 자세히 답변했습니다.
로그인 (및 기타 서버 측 로직)을 처리하고 다른 도메인에서 앱을 제공하는 (보안상의 이유로) PHP 계층이 있습니다. 나머지는 모두 JavaScript입니다.
JavaScript가 백엔드와 통신하려면 한 번에 많은 활성 연결을 처리 할 수있는 고도로 최적화 된 C ++ 서비스 인 "액세스 포인트"(AP)를 통해 통신합니다. 이 서비스는 요청을 올바른 백엔드 서비스로 라우팅하는 역할을합니다. 이 서비스는 방화벽 제한을 극복하기 위해 포트 80 및 443을 통해 실행할 수 있습니다. 통신은 WebSocket (또는 일부 브라우저의 경우 Flash)을 통해 이루어집니다.
특정 백엔드 서비스와 통신하기 위해 "Hermes"라는 자체 전송을 사용하여 AP를 통해 요청을 라우팅합니다. 이것은 기본적으로 AP가 요청을 보낼 위치를 알려주는 URL 체계입니다. 페이로드는 Protobuf로 인코딩됩니다. Hermes는이를 지원하는 브라우저 (데스크톱 클라이언트에 동일한 시스템이 있지만 대신 C ++로 구현 됨)를 위해 결과를 IndexedDB에 저장하는 멋진 캐싱 시스템 ( "Mercury"라고 함)을 가지고있어 동일한 데이터를 두 번 요청하지 않습니다. 이는 아티스트, 앨범 및 트랙과 같이 많이 다시 요청되는 리소스에 매우 유용합니다.
UI를 위해 우리는 모든 뷰를 다른 팀에서 깨뜨리는 것에 대해 걱정할 필요없이 독립적으로 개발할 수 있도록 꽤 고급 애플리케이션 프레임 워크 ( "Stitch"라고 함)를 작성했습니다. 뷰는 샌드 박스에서 실행되지만 트랙 메타 데이터로드 등과 같은 일반적인 작업을 위해 공유 라이브러리에 계속 의존 할 수 있습니다.이 글을 쓰는 시점에서 웹 플레이어에는 ~ 35 개의 고유 한 뷰 (또는 앱)가 있습니다.
Views get data and perform actions via what we call a "bridge" (basically, an API) using postMessage, so that we don't need to reinitialize all the common code for every app. The really cool thing about this is that a lot of those ~35 views I mentioned before can actually also run inside the desktop client without modification. Of course, instead of postMessage they will be using a hook into Chromium Embedded Framework, and our C++ core.
We try to use HTML 5 technologies as much as possible but in some cases depend on Flash. I think we have a really cool tech stack for our web player in general.
The frontend is written in FLEX, checkout the sources on your mac or windows machine. You will see a lot of xml file which are in the flex file format.
Off course the connection to the server and platform integration is probably written natively in c++. But the UI part is just FLEX...
'programing tip' 카테고리의 다른 글
기본 생성자 대신 TestFixtureSetUp 특성을 언제 사용합니까? (0) | 2020.11.05 |
---|---|
Common Lisp에서 eq, eql, equal 및 equalp의 차이점은 무엇입니까? (0) | 2020.11.05 |
urllib.urlopen () 후에 close ()를 호출해야합니까? (0) | 2020.11.05 |
jQuery에서 여러 ID 처리 (0) | 2020.11.05 |
치명적 : 작업 트리 디렉토리 'kivy'를 만들 수 없습니다. (0) | 2020.11.04 |