Websockets adalah teknologi canggih dan canggih yang dibungkus dengan HTML5. Pada dasarnya, Anda dapat membuka websocket untuk mengaktifkan komunikasi 2 arah yang persisten dengan server web. Klien (antarmuka pengguna) dapat mengirim pesan secara spontan, dan server juga dapat mengirim pesan.
Teknologi yang ada (JavaScript) mengharuskan semuanya dimulai oleh klien - server tidak dapat mengirim apa pun ke klien yang belum diminta klien. Jadi skrip harus terus-menerus menyegarkan dan meminta kembali data yang mungkin tidak berubah. Websockets bekerja lebih banyak pada basis " push " dan membiarkan data baru turun kapan saja.
Sayangnya, sebagian besar (yang dapat saya temukan, bagaimanapun juga) implementasi websocket memerlukan aplikasi server tertentu untuk bekerja. Orang akan menjalankan Apache pada port 80 dan 443 (http dan https) dan menjalankan sistem lain (biasanya Node.js) pada port lain (yaitu 8000 atau 8080) untuk menangani permintaan websocket.
Ini bekerja, tentu saja, tetapi ada beberapa kekurangan.
Saya memiliki plugin yang ingin saya buat yang akan sangat bermanfaat dengan menggunakan soket web di WordPress. Tetapi jika pengguna perlu menginstal server web kedua (biasanya tidak mungkin bagi orang dengan hosting bersama), maka itu tidak akan berfungsi sebagai plugin.
Jadi, bagi Anda yang memiliki pengalaman, bagaimana Anda membuat WordPress kompatibel dengan websockets? Apakah Anda akan membuat WordPress menangani komunikasi itu sendiri, atau menggabungkan skrip mini-server lain ke dalam plugin? Jika Anda sudah melakukan ini, bagaimana Anda melakukannya tanpa melanggar WordPress itu sendiri?
Sumber daya yang mungkin?
9/21/11 Pembaruan
Dengan semua pembicaraan tentang bagaimana Apache (server yang paling umum diinstal untuk menjalankan WP pada host bersama) tidak bisa menangani websockets secara asli, saya bertanya-tanya tentang alternatif. Beberapa plugin (JetPack, misalnya) berbicara dengan layanan eksternal atau API untuk menghasilkan konten.
Statistik meminta konten dari Automattic. Akismet mengirim data bolak-balik dari server eksternal. Setelah Tenggat waktu mengirimkan konten pada waktu publikasi. Beberapa alat SEO melewati banyak hal melalui sistem eksternal.
Jadi sebagai alternatif untuk menyimpan kode websocket di dalam plugin WordPress, mungkinkah menjadi tuan rumah layanan websocket di lokasi pusat dan sebaliknya menggunakan antarmuka frontend WordPress?
sumber
Jawaban:
WebSockets menggunakan protokol websockets: WS: /example.com/yourscript.js dan buka koneksi sinkron - artinya koneksi dipegang terbuka dan didedikasikan untuk browser.
Server httpd, seperti apache2 (digunakan oleh sebagian besar penyedia hosting bersama) menggunakan protokol http:
http://example.com/yourscript.js
dan membuka koneksi asinkron - artinya tidak ada koneksi yang dipegang terbuka antara server dan browser. (Anda dapat memperpanjang koneksi terbuka, secara sederhana, dengan mengatur parameter konfigurasi tertentu - tetapi secara umum, itu tidak sinkron.)Seperti yang dapat Anda bayangkan, mempertahankan koneksi terbuka antara browser dan server mendedikasikan lebih banyak sumber daya server untuk setiap koneksi browser, dan karenanya lebih membebani sumber daya server daripada menjatuhkan koneksi setelah setiap permintaan. Secara wajar penyedia hosting berbagi cenderung untuk mendukung WS pada shared hosting.
Sementara host bersama tertentu mungkin memiliki mod_python diinstal, sehingga memungkinkan pengguna plugin Anda untuk menjalankan pywebsocket , dokumentasi pywebsocket sendiri dengan jelas menyatakan bahwa "pywebsocket dimaksudkan untuk tujuan pengujian atau eksperimental."
Jadi, sementara orang dapat membayangkan plugin bundling kode python untuk membuat server pywebsocket, diberikan server apache yang mendukungnya, saya tidak percaya akan masuk akal untuk mendistribusikan plugin yang melakukannya.
sumber
Menanggapi pembaruan Anda, menurut pendapat saya dan berdasarkan penelitian yang telah saya lakukan, itu akan menjadi pilihan terbaik. Yang lebih baik lagi adalah membuat plugin ujung depan dan membuat layanan websocket eksternal untuk berbicara dengan plugin, dan membebankan biaya untuk itu sehingga Anda dapat menghasilkan uang ide Anda, jika Anda mau. Anda bahkan dapat memberikan kode sumber untuk layanan websocket dan membuat pengaturan di plugin untuk mengatur di mana (domain / IP dan port mana) layanan websocket berada.
sumber
Lupakan apache2 "klasik" - apache2-mpm-prefork - untuk tujuan ini. Mungkin apache2-mpm-event bisa menangani ini, tetapi ini masih eksperimental. Karena apache2 bukan event-driven, masalah yang dijelaskan oleh @marfarma memang ada. Anda akan memerlukan server web yang digerakkan oleh peristiwa untuk penyajian jenis ini, misalnya cherokee atau nginx.
nginx dapat menjadi manfaat nyata untuk WordPress (seperti wordpress.com menggunakannya sebagai server mereka juga), dan itu dapat mem-proxy permintaan tertentu ke layanan node.js misalnya.
Beberapa contoh dalam topik:
Saya juga membuat tutorial kecil untuk setup nginx + php-fpm + wordpress .
sumber
Solusi potensial lainnya adalah dengan menggunakan penyedia soket web pihak ketiga, saya telah sedikit bermain-main dengan Pusher (http://pusher.com/) sedikit, ada API yang dapat Anda gunakan yang dapat bekerja dengan baik untuk apa yang Anda coba lakukan. Saya telah merenungkan bagaimana saya dapat memanfaatkannya di situs WordPress saya sendiri.
Kerugian yang mungkin adalah bahwa orang lain yang mencoba menggunakan plugin Anda juga harus mendapatkan akun Pusher untuk membuatnya berfungsi. Ini jauh lebih mudah untuk dikerjakan daripada menginstal server Web Sockets Anda sendiri dan harus memeliharanya, yang sebenarnya akan menjadi keuntungan sebenarnya ketika menyangkut orang lain yang mencoba menggunakan plugin Anda.
sumber
Jawaban singkatnya adalah: ya, itu bisa dilakukan. Saya mungkin melihat ke sesuatu yang sedikit lebih didistribusikan daripada satu titik kegagalan VPS yang Anda host. Mungkin melihat ke beberapa sistem EC2 beban-seimbang atau semacam itu? (Saya berasumsi Anda memiliki aliran pendapatan untuk menyediakan kenyamanan seperti itu. Seringai )
sumber