WordPress web soketlerini desteklemek için yapılabilir mi?


18

Websockets , HTML5'e sarılmış havalı, modern bir teknolojidir. Temel olarak, bir web sunucusuyla sürekli, 2 yönlü iletişim sağlamak için bir web soketi açabilirsiniz. İstemci (kullanıcı arayüzü) kendiliğinden mesaj gönderebilir ve sunucu da mesaj gönderebilir.

Mevcut teknoloji (JavaScript) istemci tarafından her şeyin başlatılmasını gerektirir - sunucu istemciye istemcinin istemediği hiçbir şey gönderemez. Bu nedenle komut dosyalarının sürekli olarak yenilenmesi ve değişmemiş olabilecek verileri yeniden istemesi gerekir. Websockets daha fazla " itme " esasına göre çalışır ve yeni verilerin her zaman kanaldan aşağı inmesine izin verir.

Ne yazık ki, çoğu (yine de bulabildiğim) websocket uygulamaları çalışmak için belirli bir sunucu uygulaması gerektirir. İnsanlar 80 ve 443 numaralı bağlantı noktalarında (http ve https) Apache çalıştırır ve websocket isteklerini işlemek için başka bir bağlantı noktasında (yani 8000 veya 8080) başka bir sistem (genellikle Node.js) çalıştırır.

Bu kesinlikle işe yarıyor, ama bazı dezavantajları var.

WordPress içinde websockets kullanmaktan büyük fayda sağlayacak inşa etmek istediğim bir eklenti var . Ancak bir kullanıcının ikinci bir web sunucusu yüklemesi gerekiyorsa (genellikle paylaşılan barındırma hizmeti alanlar için imkansızdır), eklenti olarak çalışmaz.

Peki, deneyimi olan herhangi biriniz için WordPress'i websockets ile nasıl uyumlu hale getirirdiniz? WordPress'in iletişimin kendisini ele almasını mı yoksa eklentiye başka bir mini sunucu komut dosyasını paketlemesini ister misiniz? Bunu daha önce yaptıysanız, WordPress'in kendisini kırmadan nasıl başardınız?

Olası kaynaklar?


21.09.2011 Güncelleme

Apache'nin (WP'yi paylaşılan bir ana bilgisayarda çalıştırmak için en yaygın olarak yüklenen sunucu) websockets'i yerel olarak nasıl işleyemeyeceği konusundaki tüm konuşmalarla, bir alternatifi merak ediyorum. Birkaç eklenti (örneğin JetPack), içerik oluşturmak için harici bir hizmet veya API ile konuşur.

İstatistikler, Automattic'ten içerik ister. Akismet, verileri harici bir sunucudan ileri geri gönderir. Son başvuru tarihinden sonra yayınlanma anında içerik gönderilir. Birkaç SEO aracı, işleri dış sistemler aracılığıyla ileri geri geçirir.

Websocket kodunu bir WordPress eklentisi içine yerleştirmenin bir alternatifi olarak, bir websocket hizmetini merkezi bir konumda barındırmak ve bunun yerine bir WordPress ön ucunun etkileşime girmesi mümkün müdür?


3
Alt satır şudur: Web soketleri yerel web sunucusuyla iyi çalışmazsa, o web sunucusuyla kolayca yapamazsınız. Bu WordPress'e özgü bir sorun değildir. Belirttiğiniz gibi, websockets genellikle node.js veya benzeri bir sunucuya ihtiyaç duyar, Apache ile çok iyi çalışmazlar. Yani sorununuz "WordPress ile nasıl uyumlu hale getirebilirim" değil, "diğer tüm balık su ısıtıcısı olan" en düşük ortak payda barındırma üzerinde nasıl çalışırım ".
Otto

WebSocket desteği, yerleşik bir WebSocket sunucusu ve admin-ajax.php gibi bir uç nokta ile WordPress çekirdeğine eklenebilir, değil mi? Ayrıca, WordPress'in arkasındaki şirket Automattic tarafından geliştirilen, bir geri dönüş olarak yoklamalı WebSocket için JavaScript ön ucu / Node.js arka uç kütüphanesi Socket.IO da var.
baptx

Yanıtlar:


8

WebSockets websockets protokolünü kullanır: WS: /example.com/yourscript.js ve senkronize bir bağlantı açın - yani bağlantı açık tutulur ve tarayıcıya adanır.

apache2 (çoğu paylaşılan barındırma sağlayıcısı tarafından kullanılır) gibi httpd sunucuları http protokolünü kullanır: http://example.com/yourscript.jsve eşzamansız bir bağlantı açar - yani sunucu ile tarayıcı arasında hiçbir bağlantı açık kalmaz. (Açık bağlantıları, belirli yapılandırma parametrelerini ayarlayarak mütevazı bir şekilde uzatabilirsiniz - ancak genel olarak konuşursak, eşzamansızdır.)

Tahmin edebileceğiniz gibi, tarayıcı ile sunucu arasındaki açık bağlantıların sürdürülmesi, her tarayıcı bağlantısına daha fazla sunucu kaynağı ayırır ve bu nedenle sunucu kaynaklarının her istek sonrasında bağlantı kesilmesinden daha fazla vergilendirilmesi anlamına gelir. Paylaşılan barındırma sağlayıcıları, paylaşımlı barındırmada WS'yi desteklemek için anlaşılır bir şekilde hayal kırıklığına uğrarlar.

Bazı paylaşılan ana bilgisayarlarda mod_python yüklü olabilir, bu nedenle eklenti kullanıcılarınızın pywebsocket'i çalıştırmasına izin verirken , pywebsocket'ın kendi belgeleri "pywebsocket'in test veya deneysel amaçlar için tasarlandığını" açıkça belirtir.

Yani, bir destekleyen bir apache sunucusu göz önüne alındığında, bir pywebsocket sunucu oluşturmak için bir eklenti paketleme python kod hayal edebiliyorum, bunu hiç böyle bir eklenti dağıtmak için makul olacağını inanmıyorum.


Web soketlerini desteklediğini iddia eden birkaç düz PHP kütüphanesi var. Apache'de etkili bir şekilde çalışıp çalışmadıkları ilginç bir test olacaktır. Bağlantılar için güncellememi görüntüle ...
EAMann

3

Güncellemenize yanıt olarak, bence ve yaptığım araştırmaya dayanarak, bu en iyi seçenek olacaktır. Daha da iyisi, ön uç eklentisini oluşturmak ve eklentilerle konuşmak için harici websocket hizmetini oluşturmak ve bunun için bir ücret talep etmek, böylece fikrinizden para kazanabilirsiniz. Hatta websocket hizmeti için kaynak kodunu sağlayabilir ve websocket hizmetinin nerede (hangi etki alanı / IP ve bağlantı noktası) olduğunu ayarlamak için eklentide bir ayar oluşturabilirsiniz.


2

Bu amaçla "klasik" apache2'yi (apache2-mpm-prefork) unutun. Belki apache2-mpm-olay bunu halledebilir, ancak deneyseldir. Apache2 olay güdümlü olmadığından, @marfarma tarafından açıklanan sorun vardır. Bu tür sunumlar için olay güdümlü bir web sunucusuna ihtiyacınız olacaktır, örneğin cherokee veya nginx.

nginx , WordPress için gerçek bir fayda olabilir (wordpress.com'un sunucusu olarak da kullandığı için) ve belirtilen istekleri örneğin bir node.js hizmetine proxy olarak gönderebilir.

Konuyla ilgili bazı örnekler:

Ayrıca nginx + php-fpm + wordpress kurulumu için küçük bir öğretici yaptım .


"Klasik" yaklaşımı unutmak, profesyonel kullanıcılar için kurulumu kolay bir eklenti üretmek için gerçekten bir seçenek değildir. Evet, sunucudan bir şeyler sunmak için nginx, cherokee veya node.js kullanmak bir seçenektir, ancak bunu sadece bir eklenti benioku içine koyamazsınız ve kullanıcıların a) anlayacağını veya b) hakkında bir şey yapabileceğini umamazsınız. o.
EAMann

apache2-mpm-prefork, bu tür kullanımları idare edebilecek şekilde tasarlanmamıştır. Memcached, APC, vb. Gerektiren eklentiler vardır, bu nedenle yalnızca olay tabanlı bir web sunucusu gerekebilir. Bu bir arka uç gereksinimidir, mpm-prefork ve mpm-işçi bunun için değildir.
petermolnar

1

Başka bir potansiyel çözüm, üçüncü taraf bir web soket sağlayıcısı kullanmaktır, biraz Pusher (http://pusher.com/) ile biraz oynadım, dokunabileceğiniz bir API var. yapmaya çalışıyorsun. Kendi WordPress sitelerimden nasıl faydalanabileceğimi düşünüyordum.

Olası bir dezavantaj, eklentinizi kullanmaya çalışan diğer kişilerin de çalışmasını sağlamak için bir İtici hesabı alması gerektiğidir. Kendi Web Sockets sunucunuzu kurmak ve onu korumak zorunda kalmaktan çok daha kolay, aslında eklentinizi kullanmaya çalışan başkaları söz konusu olduğunda aslında bir avantaj olacaktır.


0

Kısa cevap: evet, yapılabilir. Yine de, barındırdığınız başarısızlık VPS'nin tek bir noktasından biraz daha dağıtılmış bir şeye bakabilirim. Belki yük dengelemeli EC2 sistemlerine mi bakabilirsiniz? (Bu kolaylıkları sağlamak için bir gelir akışınız olduğunu varsayıyorum. Sırıtış )


1
"böyle kolaylıklar sağlamak için bir gelir akışı" ... bu güzel olurdu :-)
EAMann
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.