我最近一直在四处寻找,寻找一种在nodeJS和PHP之间进行通信的好方法. idea 是这样的:nodeJS仍然很新,仅使用它开发完整的应用程序可能有点棘手.此外,您可能只需要在项目的一个模块中使用它,比如实时通知、聊天等等...你想用PHP管理所有其他东西,因为这对你来说可能更容易(而且你可以利用现有的框架,比如CodeIgniter或Symfony).

我想要一个简单的解决方案;我不想使用cURL或第三台服务器在Apache和 node 服务器之间进行通信.我想要的是能够用简单的Javascript客户端从 node 捕获事件.

我没有找到任何完整的答案,大部分时间客户端都是由 node 服务器运行的,因此不适用于我的情况.于是我爬遍了所有可能的话题,终于找到了答案;我将try 分享这一点,并有一点,这一切都清楚.

希望这能帮助一些人!;)

推荐答案

因此,首先,我将我的项目放在GitHub上,如果您想访问完整的代码:https://github.com/jdutheil/nodePHP

这是一个非常简单的示例项目:网络聊天.你只需要一个作者和一条信息,当你按下send时,它就会保存在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>

最后,我的顾客.js,我们只需连接到 node 服务器,等待事件更新页面即可

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

我会尽快更新和改进我的代码,但我认为它已经对所有很酷的东西开放了!我真的很愿意就这件事征求意见和 comments ,这是做这件事的好方法吗??

希望这能帮助一些人!

Php相关问答推荐

WordPress:将自定义单选输入字段添加到用户配置文件

在函数内部获取一致的单选按钮值以更新WordPress用户数据

PHP DateInterval天数不一致

在特定订单状态更改时自定义WooCommerce订单发货项目

列出所有WooCommerce处理订单中的产品数量,SKU和品牌

文件::Files()响应返回空对象数组

Azure应用程序无法访问共享文件夹

Laravel withOnly不限制查询

无法在 WordPress 上获取 JSON 数据

Woocommerce 仅在前端为登录用户提供价格折扣

根据页面以及是否在促销,向 WooCommerce 中显示的价格添加前缀

我不明白为什么我收到未定义的数组键异常错误 - Laravel 9 PHP 8

在 WordPress 中将自定义帖子类型永久链接设置为 root

在 WooCommerce wc_get_products 函数中处理自定义分类法

从 Laravel 机制中排除目录并直接访问该目录

我的功能以舒适的方式显示数组 struct

PHP:如何将多列sql查询结果转换成数组

在 WordPress 中使用 $wpdb 运行 MySQL 事务是否安全?

PHP 将数组值插入到 csv 列

如何限制for循环php中的条目数