98

私は最近、nodeJS と PHP の間で通信するための良い方法を見つけるために探し回っています。ここにアイデアがあります: nodeJS はまだかなり新しいものであり、それだけで完全なアプリケーションを開発するのはちょっと難しいかもしれません。さらに、リアルタイム通知、チャットなど、プロジェクトの 1 つのモジュールにのみ必要な場合があります。また、PHP を使用して他のすべてのものを管理したい場合もあります。 CodeIgniter や Symfony などの既存のフレームワーク)。

簡単な解決策が欲しいです; cURL や 3 番目のサーバーを使用して Apache と Node サーバー間の通信を行いたくありません。私が望むのは、単純な Javascript のクライアント側でノードからイベントをキャッチできるようにすることです。

ほとんどの場合、クライアント側はノードサーバーによって実行されていたので、私の場合は当てはまりませんでした。そこで、考えられるすべてのトピックをクロールし、最終的に答えを見つけました。これを共有して、すべてが明確になるようにします。

これが何人かの人々を助けることを願っています! ;)

4

3 に答える 3

131

したがって、完全なコードにアクセスしたい場合は、まず、プロジェクトを github に配置します: https://github.com/jdutheil/nodePHP

これは、Web チャットという非常に単純なサンプル プロジェクトです。作成者とメッセージだけがあり、送信を押すと、mysql データベースに保存されます。アイデアは、リアルタイムの更新を送信し、実際の会話をすることです。;) そのために nodeJS を使用します。

PHP コードについては説明しません。これは非常に単純で、ここでは面白くありません。ここでお見せしたいのは、nodeJS コードを統合する方法です。

Express と Socket.IO を使用しているので、これらのモジュールは必ず npm でインストールしてください。次に、単純な nodeJS サーバーを作成します。

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 );

新しいユーザーが接続されたときのイベント コールバックを登録しました。メッセージ (チャット メッセージを表す) を受信するたびに、接続しているすべてのユーザーにブロードキャストします。さて、トリッキーな部分: クライアント側! nodeServer なしで Socket.IO コードを実行できるようにするためのスクリプト インクルードがわからなかったため (クライアント ページは Apache によって提供されるため)、ほとんどの時間を費やした部分です。

しかし、すべてがすでに行われています。npm で Socket.IO モジュールをインストールすると、スクリプトが で利用可能になり/node_modules/socket.io/node_modules/socket.io-client/dist/socket.io.jsます。私の場合、PHPページに含めるスクリプトは次のとおりです。

    <script src="js/node_modules/socket.io/node_modules/socket.io-client/dist/socket.io.js"></script>
    <script src="js/nodeClient.js"></script>

最後に、nodeClient.js で、ノード サーバーに接続し、イベントがページを更新するのを待ちます。;)

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 );
});

できるだけ早くコードを更新して改善するようにしますが、すでにすべてのクールなものに対応していると思います! 私はこの件に関するアドバイスやレビューを本当に歓迎しています.それは良い方法ですか..?

これが何人かの人々を助けることを願っています!

于 2013-06-20T09:11:46.990 に答える
2

私には非常にうまく機能する別のソリューションがありますが、実際のサーバーでテストする機会/時間がないため、それがどれほど効果的かについて誰かにコメントしてもらいたいと思います.

これがnode-jsコードです。このコードを nodeserver.js というファイルに入れました。

var http = require('http');

http.createServer(function (req, res) {
    res.writeHead(200, {'Content-Type': 'text/html'});

    var knall = new Object();
    knall.totten = "4 tomtar";
    knall.theArr = new Array();
    knall.theArr.push("hoppla")
    knall.theArr.push("hej")
    var strKnall = JSON.stringify(knall);

    res.end(strKnall);
}).listen(process.env.PORT);  

そして、これは php の単純なコードで、file_get_contents() を使用して node-js サーバーを呼び出します。

$json = file_get_contents('http://localhost:3002/knall.json');
$obj = json_decode($json);

php-pageをロードすると、nodeserver.jsページが呼び出され、knall-objectがjson化されます。

Windows 10のiisで実行されている2つのlocalhostインストール、1つの標準phpサーバーがあり、nodejsサーバーはきちんとしたiisnodeパッケージで動作します。

「実際の」サーバーはubuntuで実行されます。

これは 2 つのサーバー間の通信のためのきちんとした簡単な解決策だと思いますが、それについて何かコメントがあれば教えてください。

于 2016-10-19T12:08:08.250 に答える