웹 소켓을 지원하기 위해 WordPress를 만들 수 있습니까?


18

웹 소켓 은 HTML5에 싸여있는 멋진 최신 기술입니다. 기본적으로 웹 소켓을 열어 웹 서버와 지속적인 양방향 통신을 가능하게 할 수 있습니다. 클라이언트 (사용자 인터페이스)는 자발적으로 메시지를 보낼 수 있으며 서버도 메시지를 보낼 수 있습니다.

기존 기술 (자바 스크립트)은 클라이언트가 모든 것을 시작해야합니다. 서버는 클라이언트가 요청하지 않은 것을 클라이언트에 보낼 수 없습니다. 따라서 스크립트는 변경되지 않은 데이터를 지속적으로 새로 고치고 다시 요청해야합니다. 웹 소켓은 " 푸쉬 "방식으로 더 많은 작업을 수행 하고 새로운 데이터가 파이프로 내려올 수 있도록합니다.

불행히도, 대부분의 (어쨌든 찾을 수있는) 웹 소켓 구현에는 특정 서버 응용 프로그램이 작동해야합니다. 사람들은 포트 80 및 443 (http 및 https)에서 Apache를 실행하고 다른 포트 (예 : 8000 또는 8080)에서 다른 시스템 (일반적으로 Node.js)을 실행하여 웹 소켓 요청을 처리합니다.

이것은 분명히 작동하지만 몇 가지 단점이 있습니다.

WordPress에서 웹 소켓을 사용 하면 이점을 얻을 수있는 플러그인이 있습니다 . 그러나 사용자가 두 번째 웹 서버를 설치해야하는 경우 (일반적으로 공유 호스팅을 사용하는 사람들에게는 불가능 함) 플러그인으로 작동하지 않습니다.

그렇다면 경험이있는 사람이라면 어떻게 WordPress를 웹 소켓과 호환시킬 수 있습니까? WordPress가 통신 자체를 처리하도록하거나 다른 미니 서버 스크립트를 플러그인에 번들로 제공 하시겠습니까? 이 작업을 이미 완료 한 경우 WordPress 자체를 중단하지 않고 어떻게 수행 했습니까?

가능한 자원?


9/21/11 업데이트

Apache (공유 호스트에서 WP를 실행하기 위해 가장 일반적으로 설치되는 서버)가 웹 소켓을 실제로 처리 할 수없는 방법에 대한 모든 이야기와 함께 대안에 대해 궁금합니다. 여러 플러그인 (예 : JetPack)은 외부 서비스 또는 API와 통신하여 컨텐츠를 생성합니다.

통계는 Automattic의 컨텐츠를 요청합니다. Akismet은 외부 서버와 데이터를주고받습니다. 마감일이 게시 시간에 콘텐츠를 제출 한 후 일부 SEO 도구는 외부 시스템을 통해 사물을 전달합니다.

따라서 WordPress 플러그인 내에 웹 소켓 코드를 수용하는 대안으로 웹 소켓 서비스를 중앙 위치에 호스팅하고 WordPress 프런트 엔드가 그와 상호 작용할 수 있습니까?


3
결론은 다음과 같습니다. 웹 소켓이 기본 웹 서버에서 제대로 작동하지 않으면 해당 웹 서버에서 쉽게 웹 소켓을 사용할 수 없습니다. 이것은 WordPress 관련 문제가 아닙니다. 언급했듯이 웹 소켓에는 일반적으로 node.js와 같은 별도의 서버가 필요하지만 Apache와 전혀 잘 작동하지 않습니다. 따라서 귀하의 문제는 "워드 프레스와 어떻게 호환되게합니까?"가 아니라 "어떻게하면 가장 낮은 공통 분모 호스팅에서 작동하게합니까?"라는 것입니다.
Otto

WebSocket 지원은 내장 WebSocket 서버와 admin-ajax.php와 같은 엔드 포인트를 사용하여 WordPress 코어에 추가 할 수 있습니다. 폴링으로 폴링되는 WebSocket 용 JavaScript 프론트 엔드 / Node.js 백엔드 라이브러리 Socket.IO도 있으며 WordPress의 회사 인 Automattic에 의해 개발되었습니다.
baptx

답변:


8

WebSocket은 WS : /example.com/yourscript.js와 같은 websockets 프로토콜을 사용하고 동기 연결을 엽니 다. 즉, 연결이 열려 있고 브라우저 전용입니다.

apache2와 같은 httpd 서버 (대부분의 공유 호스팅 공급자가 사용)는 http 프로토콜을 사용하고 http://example.com/yourscript.js비동기 연결을 엽니 다. 즉, 서버와 브라우저간에 열린 연결이 없습니다. (특정 구성 매개 변수를 설정하여 열린 연결을 적당히 연장 할 수 있지만 일반적으로 비동기식입니다.)

상상할 수 있듯이 브라우저와 서버 간의 열린 연결을 유지하면 각 브라우저 연결에 더 많은 서버 리소스가 사용되므로 각 요청 후 연결을 끊는 것보다 서버 리소스에 더 많은 부담이 있습니다. 공유 호스팅 공급자는 공유 호스팅에서 WS를 지원하기 위해 이해할 수없는 수준입니다.

특정 공유 호스트에 mod_python이 설치되어 있으므로 플러그인 사용자가 pywebsocket 을 실행할 수 있지만 pywebsocket의 자체 문서에는 "pywebsocket이 테스트 또는 실험 목적으로 작성되었습니다"라고 명시되어 있습니다.

따라서 pywebsocket 서버를 생성하는 플러그인 번들 파이썬 코드를 상상할 수는 있지만 지원하는 아파치 서버를 고려하면 플러그인을 배포하는 것이 합리적이라고 생각하지 않습니다.


웹 소켓을 지원한다고 주장하는 간단한 PHP 라이브러리가 몇 가지 있습니다. 그들이 아파치에서 효과적으로 작동하는지 여부는 흥미로운 테스트가 될 것입니다. 링크는 내 업데이트를 참조하십시오 ...
EAMann

3

귀하의 업데이트에 대한 나의 의견으로는 내가 한 연구에 근거하여, 이것이 최선의 선택이 될 것입니다. 프론트 엔드 플러그인을 작성하고 플러그인과 대화 할 외부 웹 소켓 서비스를 작성하고 비용을 청구하여 원하는 경우 아이디어로 수익을 창출하는 것이 더 좋습니다. 웹 소켓 서비스의 소스 코드를 제공하고 플러그인에서 웹 소켓 서비스의 위치 (도메인 / IP 및 포트)를 설정하는 설정을 작성할 수도 있습니다.


2

이 목적을 위해 "클래식"apache2-apache2-mpm-prefork를 잊어 버리십시오. 어쩌면 apache2-mpm-event가 이것을 처리 할 수는 있지만 실험적입니다. apache2는 이벤트 중심적이지 않기 때문에 @marfarma에 설명 된 문제가 존재합니다. 이러한 종류의 서비스 (예 : cherokee 또는 nginx)를 위해서는 이벤트 중심 웹 서버가 필요합니다 .

nginx 는 WordPress의 실질적인 이점이 될 수 있으며 (wordpress.com도 서버로 사용하므로) 지정된 요청을 node.js 서비스로 프록시 할 수 있습니다.

주제의 몇 가지 예 :

또한 nginx + php-fpm + wordpress setup에 대한 작은 자습서를 만들었습니다 .


"클래식"접근 방식을 잊어 버리는 것은 일반 사용자를위한 설치하기 쉬운 플러그인을 만드는 옵션이 아닙니다. 예, nginx, cherokee 또는 node.js를 사용하여 서버에서 제공하는 것은 옵션이지만 플러그인 readme에 넣을 수는 없으며 사용자가 a) 이해하거나 b) 무엇이든 할 수 있기를 바랍니다. 그것.
EAMann September

apache2-mpm-prefork는 이러한 종류의 사용을 처리 할 수 ​​있도록 설계되지 않았습니다. memcached, APC 등이 필요한 플러그인이 있으므로 이벤트 기반 웹 서버 만 필요할 수 있습니다. 이것은 백엔드 요구 사항이며 mpm-prefork이며 mpm-worker는이 기능을 지원하지 않습니다.
petermolnar

1

또 다른 잠재적 인 솔루션은 타사 웹 소켓 공급자를 사용하는 것입니다 .Pusher (http://pusher.com/)로 조금 놀아 보았습니다. 사용할 수있는 API가 있습니다. 노력하고 있습니다. 내 WordPress 사이트에서 어떻게 사용할 수 있을지 고민하고 있습니다.

가능한 단점은 플러그인을 사용하려는 다른 사람들도 Pusher 계정을 만들어야 작동한다는 것입니다. 자신의 Web Sockets 서버를 설치하고 유지 관리하는 것보다 작업하기가 훨씬 쉽습니다. 실제로 플러그인을 사용하려는 다른 사람들에게 유리합니다.


0

짧은 대답은 그렇습니다. 가능합니다. 그래도 호스팅하는 단일 장애 지점 VPS보다 조금 더 분산 된 것을 살펴볼 수 있습니다. 로드 밸런싱 된 EC2 시스템 또는 이와 유사한 시스템을 살펴보십시오. (나는 당신이 그러한 편의를 제공하기 위해 수입원이 있다고 가정합니다. grin )


1
"그러한 편의를 제공하기위한 수익원"... 좋을 것입니다 :-)
EAMann
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.