Jadi, sebagai permulaan, saya meletakkan proyek saya di github, jika Anda ingin mengakses kode lengkap: https://github.com/jdutheil/nodePHP
Ini adalah proyek contoh yang sangat sederhana: obrolan web. Anda hanya memiliki seorang penulis dan pesan, dan ketika Anda menekan kirim itu disimpan dalam database mysql. Idenya adalah mengirim pembaruan waktu nyata, dan melakukan percakapan nyata. ;) Kami akan menggunakan nodeJS untuk itu.
Saya tidak akan berbicara tentang kode PHP, ini sangat sederhana dan tidak menarik di sini; apa yang ingin saya tunjukkan adalah bagaimana mengintegrasikan kode nodeJS Anda.
Saya menggunakan express dan Socket.IO, jadi pastikan untuk menginstal modul tersebut dengan npm. Kemudian, kami membuat server nodeJS sederhana:
var socket = require( 'socket.io' );
var express = require( 'express' );
var http = require( 'http' );
var app = express();
var server = http.createServer( app );
var io = socket.listen( server );
io.sockets.on( 'connection', function( client ) {
console.log( "New client !" );
client.on( 'message', function( data ) {
console.log( 'Message received ' + data.name + ":" + data.message );
io.sockets.emit( 'message', { name: data.name, message: data.message } );
});
});
server.listen( 8080 );
Kami mendaftarkan acara callback kami ketika pengguna baru terhubung; setiap kali kami menerima pesan (mewakili pesan obrolan), kami menyiarkannya ke setiap pengguna yang terhubung. Sekarang, bagian yang sulit: sisi klien! Itu bagian yang menyita sebagian besar waktu saya, karena saya tidak tahu skrip mana yang termasuk untuk dapat menjalankan kode Socket.IO tanpa nodeServer (karena halaman klien akan dilayani oleh Apache).
Tapi semuanya sudah selesai; ketika Anda menginstal modul Socket.IO dengan npm, skrip tersedia di /node_modules/socket.io/node_modules/socket.io-client/dist/socket.io.js
; bahwa skrip yang akan kami sertakan di halaman PHP kami, dalam kasus saya:
<script src="js/node_modules/socket.io/node_modules/socket.io-client/dist/socket.io.js"></script>
<script src="js/nodeClient.js"></script>
Dan untuk menyelesaikan, nodeClient.js saya, di mana kita cukup terhubung ke server node dan menunggu acara untuk memperbarui halaman kita. ;)
var socket = io.connect( 'http://localhost:8080' );
$( "#messageForm" ).submit( function() {
var nameVal = $( "#nameInput" ).val();
var msg = $( "#messageInput" ).val();
socket.emit( 'message', { name: nameVal, message: msg } );
// Ajax call for saving datas
$.ajax({
url: "./ajax/insertNewMessage.php",
type: "POST",
data: { name: nameVal, message: msg },
success: function(data) {
}
});
return false;
});
socket.on( 'message', function( data ) {
var actualContent = $( "#messages" ).html();
var newMsgContent = '<li> <strong>' + data.name + '</strong> : ' + data.message + '</li>';
var content = newMsgContent + actualContent;
$( "#messages" ).html( content );
});
Saya akan mencoba memperbarui dan meningkatkan kode saya secepat mungkin, tetapi saya pikir itu sudah terbuka untuk semua hal keren! Saya sangat terbuka untuk saran dan ulasan tentang hal ini, apakah ini cara yang baik untuk melakukannya, ..?
Semoga ini bisa membantu beberapa orang!
Saya memiliki solusi lain yang bekerja cukup baik untuk saya, tetapi saya ingin seseorang berkomentar tentang seberapa efektifnya, karena saya belum (belum) memiliki kesempatan / waktu untuk mengujinya di server sebenarnya.
Ini dia kode node-js. Saya meletakkan kode ini dalam file bernama nodeerver.js:
Dan berikut adalah potongan kode sederhana di php, memanggil server node-js dengan bantuan file_get_contents ():
Berfungsi dengan baik, ketika saya memuat halaman php, itu pada gilirannya memanggil halaman nodeerver.js, yang jsonify knall-object.
Saya memiliki dua instalasi localhost yang berjalan di iis di windows 10, satu php-server standar, dan nodejs-server bekerja dengan paket iisnode yang rapi .
Server 'nyata' dijalankan di ubuntu.
Saya pikir ini adalah solusi yang rapi dan mudah untuk komunikasi antara dua server, tetapi mungkin seseorang memiliki komentar tentang itu?
sumber
nodejs.js
sebenarnya bukan file sumber, tetapi ini adalah URL yang Anda beri nama, karena berisi json? Yang pertama tidak masuk akal, tetapi yang terakhir tampaknya sangat membingungkan saya.Coba serupa atau Anda dapat memeriksa blog saya untuk kode contoh lengkap di nodejs
Di sisi halaman Anda:
emit
fungsi untuk mengirim data ke nodeerver.Jadi sekarang kode Anda akan terlihat seperti
Sekarang di sisi server Node buat penangan untuk permintaan Anda untuk mendapatkan permintaan Anda dan mengirim pesan ke semua perangkat / browser yang terhubung (server.js)
Sekarang sisi klien / browser / klien membuat penerima untuk menerima pesan soket dari server node
sumber