Penggunaan fungsi SCOKET pada PHP

Apakah mungkin menggunakan Sockets.io di sisi klien dan berkomunikasi dengan aplikasi berbasis PHP di server? Apakah PHP bahkan mendukung cara penulisan kode 'koneksi jangka panjang'?

Semua kode sampel yang saya temukan untuk socket.io tampaknya untuk node.js di sisi server, jadi tidak ada bantuan di sana.

Mungkin agak terlambat untuk menjawab pertanyaan ini, tetapi inilah yang saya temukan.

Saya tidak ingin berdebat tentang fakta bahwa node melakukan itu lebih baik daripada php atau tidak, ini bukan intinya.

Solusinya adalah: Saya belum menemukan implementasi socket.io untuk PHP.

Tetapi ada beberapa cara untuk mengimplementasikan WebSockets . Ada plugin jQuery ini memungkinkan Anda untuk menggunakan Websockets sementara dengan anggun merendahkan untuk browser yang tidak mendukung. Di sisi PHP, ada kelas ini yang tampaknya paling banyak digunakan untuk PHP server WS.

Jika Anda ingin menggunakan socket.io bersama dengan php ini mungkin jawaban Anda!

situs web proyek:

elephant.io

mereka juga ada di github:

https://github.com/wisembly/elephant.io

Elephant.io menyediakan klien socket.io yang sepenuhnya ditulis dalam PHP yang seharusnya dapat digunakan di mana saja dalam proyek Anda.

Ini adalah pustaka yang ringan dan mudah digunakan yang bertujuan untuk menghadirkan fungsionalitas waktu-nyata ke aplikasi PHP melalui socket.io dan websockets untuk tindakan yang tidak dapat dilakukan dalam javascript penuh.

contoh dari situs web proyek (berkomunikasi dengan server websocket melalui php)

server php

use ElephantIO\Client as Elephant;

$elephant = new Elephant('http://localhost:8000', 'socket.io', 1, false, true, true);

$elephant->init();
$elephant->send(
    ElephantIOClient::TYPE_EVENT,
    null,
    null,
    json_encode(array('name' => 'foo', 'args' => 'bar'))
);
$elephant->close();

echo 'tryin to send `bar` to the event `foo`';

socket io server

var io = require('socket.io').listen(8000);

io.sockets.on('connection', function (socket) {
  console.log('user connected!');

  socket.on('foo', function (data) {
    console.log('here we are in action event and data is: ' + data);
  });
});

Jika Anda benar-benar ingin menggunakan PHP sebagai backend Anda untuk socket.io, inilah yang saya temukan. Dua alternatif sisi server socket.io php.

https://github.com/walkor/phpsocket.io

https://github.com/RickySu/phpsocket.io

Kode exmaple untuk repositori pertama seperti ini.

use PHPSocketIO\SocketIO;

// listen port 2021 for socket.io client
$io = new SocketIO(2021);
$io->on('connection', function($socket)use($io){
  $socket->on('chat message', function($msg)use($io){
    $io->emit('chat message', $msg);
  });
});

Erm, mengapa kamu mau? Biarkan PHP di bagian belakang dan NodeJS/Soket untuk melakukan hal yang tidak menghalangi.

Ini adalah sesuatu untuk Anda mulai: http://groups.google.com/group/socket_io/browse_thread/thread/74a76896d2b72ccc

Secara pribadi saya telah menjalankan express dengan titik akhir yang mendengarkan dengan jelas untuk interaksi dari PHP.

Misalnya, jika saya telah mengirim email kepada pengguna, saya ingin socket.io menampilkan pemberitahuan real-time kepada pengguna.

Ingin interaksi dari socket.io ke php, Anda bisa melakukan sesuatu seperti ini:

var http = require('http'),
            Host = WWW_Host,
            clen = 'userid=' + userid,
            site = http.createClient(80, Host),
            request = site.request("POST", "/modules/nodeim/includes/signonuser.inc.php",  
                {'Host':Host,'Content-Length':clen.length,'Content-Type':'application/x-www-form-urlencoded'});                     

request.write('userid=' + userid);      
request.end();  

Serius, PHP bagus untuk melakukan hal-hal sisi server dan membiarkannya dengan koneksi yang tidak memiliki tempat di domain ini sekarang. Mengapa melakukan polling yang lama ketika Anda memiliki soket web atau flash.

Untuk 'koneksi berumur panjang' yang Anda sebutkan, Anda dapat menggunakan Ratchet untuk PHP. Itu adalah perpustakaan yang dibangun berdasarkan fungsi Stream Socket yang PHP telah didukung sejak PHP 5.

Untuk sisi klien, Anda perlu menggunakan WebSocket yang didukung HTML5 alih-alih Socket.io (karena Anda tahu, socket.io hanya bekerja dengan node.js).

Jika Anda masih ingin menggunakan Socket.io, Anda dapat mencoba cara ini: - cari & dapatkan socket.io.js untuk digunakan klien - bekerja dengan Ratchet untuk mensimulasikan cara socket.io di server

Semoga ini membantu!

Saya tahu orang yang berjuang! Tapi saya baru-baru ini cukup banyak bekerja dengan Workerman. Jika Anda belum menemukan kerangka kerja php ini maka Anda sebaiknya memeriksanya!

Well, Workerman adalah kerangka kerja PHPyang didorong asinkron untuk dengan mudah membangun aplikasi jaringan yang cepat dan dapat diskalakan. (Saya hanya menyalin dan menempelkannya dari situs web mereka hahahah http://www.workerman.net/en/ )

Cara mudah untuk menjelaskan ini adalah bahwa ketika datang pemrograman web socket yang Anda benar-benar perlu miliki adalah memiliki 2 file di server Anda atau server lokal (di mana pun Anda bekerja).

  1. server.php (kode sumber yang akan menanggapi semua permintaan klien)

  2. client.php/client.html (kode sumber yang akan melakukan permintaan barang)

Jadi pada dasarnya, Anda benar kode terlebih dahulu pada Anda server.php dan mulai server. Biasanya, karena saya menggunakan windows yang menambahkan lebih banyak perjuangan, saya menjalankan server melalui perintah ini -> php server.php start

Nah jika Anda menggunakan xampp. Inilah satu cara untuk melakukannya. Pergi ke mana pun Anda ingin meletakkan file Anda. Dalam kasus kami, kami akan memasukkan file

C: /xampp/htdocs/websocket/server.php

C: /xampp/htdocs/websocket/client.php atau client.html

Dengan asumsi bahwa Anda sudah memiliki file-file itu di server lokal Anda. Buka Git Bash atau Command Line atau Terminal atau apa pun yang Anda gunakan dan unduh pustaka php di sini.

https://github.com/walkor/Workerman

https://github.com/walkor/phpsocket.io

Saya biasanya mengunduhnya melalui composer dan hanya memuat ulang secara otomatis file-file itu dalam skrip php saya.

Dan juga periksa yang ini. Ini benar-benar penting ! Anda memerlukan perpustakaan javascript ini agar Anda client.php atau client.html untuk berkomunikasi dengan server.php saat Anda menjalankannya.

https://github.com/walkor/phpsocket.io/tree/master/examples/chat/public/socket.io-client

Saya hanya menyalin dan menempelkan folder socket.io-client pada tingkat yang sama dengan server.php dan client.php saya

Berikut adalah kode sumber server.php

<?php
require __DIR__ . '/vendor/autoload.php';

use Workerman\Worker;
use PHPSocketIO\SocketIO;

// listen port 2021 for socket.io client
$io = new SocketIO(2021);
$io->on('connection', function($socket)use($io){
    $socket->on('send message', function($msg)use($io){
        $io->emit('new message', $msg);
    });
});

Worker::runAll();

Dan berikut ini adalah client.php atau client.html kode sumber

<!DOCTYPE html>
<html>
    <head>
        <title>Chat</title>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">        
    </head>
    <body>
        <div id="chat-messages" style="overflow-y: scroll; height: 100px; "></div>        
        <input type="text" class="message">
    </body>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>    
    <script src="socket.io-client/socket.io.js"></script>  
    <script>
            var socket = io.connect("ws://127.0.0.1:2021");

            $('.message').on('change', function(){
                socket.emit('send message', $(this).val());
                $(this).val('');
            });

            socket.on('new message', function(data){
                $('#chat-messages').append('<p>' + data +'</p>');
            });
    </script>
</html>

Sekali lagi, buka baris perintah Anda atau git bash atau terminal tempat Anda meletakkan file server.php Anda. Jadi dalam kasus kami, yaitu C:/xampp/htdocs/websocket/dan mengetikkan php server.php start dan tekan enter.

Lalu buka browser Anda dan ketik http: //localhost/websocket/client.php untuk mengunjungi situs Anda. Kemudian cukup ketik apa saja ke kotak teks itu dan Anda akan melihat websocket php dasar saat bepergian!

Anda hanya perlu mengingatnya. Dalam pemrograman soket web, itu hanya membutuhkan server dan klien. Jalankan kode server terlebih dahulu dan buka kode klien. Dan begitulah! Semoga ini membantu!

Bagaimana dengan ini ? PHPSocketio ?? Ini adalah alternatif sisi server socket.io php. Pengulangan acara didasarkan pada ekstensi acara pecl. Meski belum mencobanya sendiri sampai sekarang.

Kami sekarang pada tahun 2018 dan hoola, ada cara untuk mengimplementasikan WS dan WAMPServer di php. Itu Dipanggil Ratchet .

Saya belum mencobanya, tetapi Anda harus dapat melakukan ini dengan ReactPHP dan ini komponen soket . Tampak seperti Node, tetapi dalam PHP.

Saya mencari cara yang sangat sederhana untuk mendapatkan PHP untuk mengirim pesan socket.io ke klien.

Ini tidak memerlukan perpustakaan PHP tambahan - hanya menggunakan soket.

Alih-alih mencoba untuk terhubung ke antarmuka websocket seperti banyak solusi lain, cukup sambungkan ke server node.js dan gunakan .on('data') untuk menerima pesan.

Kemudian, socket.io dapat meneruskannya ke klien.

Deteksi koneksi dari server PHP Anda di Node.js seperti ini:

//You might have something like this - just included to show object setup
var app = express();
var server = http.createServer(app);
var io = require('socket.io').listen(server);

server.on("connection", function(s) {
    //If connection is from our server (localhost)
    if(s.remoteAddress == "::ffff:127.0.0.1") {
        s.on('data', function(buf) {
            var js = JSON.parse(buf);
            io.emit(js.msg,js.data); //Send the msg to socket.io clients
        });
    }
});

Inilah kode php yang sangat sederhana - saya membungkusnya dalam suatu fungsi - Anda dapat menemukan sesuatu yang lebih baik.

Perhatikan bahwa 8080 adalah port ke server Node.js saya - Anda mungkin ingin mengubahnya.

function sio_message($message, $data) {
    $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
    $result = socket_connect($socket, '127.0.0.1', 8080);
    if(!$result) {
        die('cannot connect '.socket_strerror(socket_last_error()).PHP_EOL);
    }
    $bytes = socket_write($socket, json_encode(Array("msg" => $message, "data" => $data)));
    socket_close($socket);
}

Anda bisa menggunakannya seperti ini:

sio_message("chat message","Hello from PHP!");

Anda juga dapat mengirim array yang dikonversi ke json dan diteruskan ke klien.

sio_message("DataUpdate",Array("Data1" => "something", "Data2" => "something else"));

Ini adalah cara yang berguna untuk "mempercayai" bahwa klien Anda mendapatkan pesan yang sah dari server.

Anda juga dapat meminta PHP meneruskan pembaruan basis data tanpa meminta ratusan klien untuk meminta basis data.

Saya berharap saya menemukan ini lebih cepat - semoga ini membantu! ????