如何集成nodeJS + Socket.IO和PHP?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (121)

我最近一直在找一个在nodeJS和PHP之间进行通信的好方法。这里有一个想法:nodeJS还是很新的,只用它开发一个完整的应用程序可能有些棘手。此外,你可能只需要为你的项目的一个模块,如实时通知,聊天,...你想用PHP管理所有其他的东西,因为它可能更容易为你(你可以利用现有的框架,如CodeIgniter或Symfony)。

我想要一个简单的解决方案; 我不想使用cURL或第三台服务器在Apache和Node服务器之间进行通信。我想要的是能够在简单的Javascript,客户端捕捉来自节点的事件。

提问于
用户回答回答于

这是一个非常简单的例子:网络聊天。你只有一个作者和消息,当按下发送时,它将保存在MySQL数据库中。这样做的目的是发送实时更新,并进行真正的对话。我们将使用NodeJS。

我不想讨论PHP代码,它非常简单,在这里并不有趣;我想展示的是如何集成NodeJS代码。

我们创建一个简单的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的IO代码(因为客户端页面将由Apache提供)。但一切都已经完成了,当您安装套接字时。使用npm的io模块,脚本可在;我们将在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 );
});
用户回答回答于

这里是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页面时,它依次调用nodeserver.js页面,该页面对knall对象进行json化。

扫码关注云+社区