gpt4 book ai didi

php - 使用 PHP 和 Node.js 的 Websocket

转载 作者:太空宇宙 更新时间:2023-11-04 02:30:41 27 4
gpt4 key购买 nike

是否可以让 PHP 脚本通过 websocket 将数据发送到 Node.js 服务器?

我正在计划一个副项目,让 PHP 脚本在后台运行,发挥一些魔力,最终用户使用的前端应用程序将在 Node.js 中。仅在 Node.js 中会有一些 socket.io 交互,但我希望能够从 PHP 脚本将数据推送到 socket.io。

最佳答案

我也在做这方面的工作。我的实现与其他人略有不同。大多数人使用php&curl+nodejs&express&socketio

我是按照以下方式完成的:

  • php 和 nodejs 中的 memcache(共享 userid 和 cookie)(您也可以使用 redis)
  • 一个自定义 PHP 类,用于通过 websocket 将请求发送到本地主机,其中 Nodejs 服务器将广播到用户房间(来自同一用户的所有 session )。

Here是我用来从 php 到 socketio 进行通信的类(仅向 Nodejs 发送数据,而不向周围发送数据!)

当我连接到 socket.io 时,我的脚本读取我的 php cookie 并将其发送到 Node 服务器,在 Node 服务器上它访问 memcache json session 并识别用户,将他加入到一个房间。

Here是一个 php json 序列化的 memcached session 处理程序类。跟我用的差不多。

要在 php --> socket.io 中发出请求,我执行以下操作:

$s = new SocketIO('127.0.0.1', 8088);

$adata = "On the other hand, we denounce with righteous indignation and dislike men who are so beguiled and demoralized by the charms of pleasure of the moment, so blinded by desire, that they cannot foresee the pain and trouble that are bound to ensue; and equal blame belongs to those who fail in their duty through weakness of will, which is the same as saying through shrinking from toil and pain.";

$msg = json_encode(array('event'=> 'passdata','data'=> $adata, 'to'=> 1));

$tr = 0;
$fl = 0;
for ($i = 0 ; $i < 1000; $i++) {
$s->send( 'broadcast', $msg ) ? $tr++ : $fl++;
}
echo "HIT : " . $tr . PHP_EOL;
echo "MISS: " . $fl;

当来自本地主机的(socket.io)请求发送到服务器时,我运行以下代码:

var is_local = (this_ip === '127.0.0.1' ? true : false);
socket.on('broadcast', function(data) {
if (data.length === 0 ) return;
if (is_local && typeof data === 'string') {
try {
var j = JSON.parse(data);
} catch (e) {
console.log("invalid json @ broadcast".red);
return false;
}
if (!j.hasOwnProperty('to') && !j.hasOwnProperty('event')) return false;
io.to(j.to).emit(j.event, j.data);
console.log('brc'.blue + ' to: ' + j.to + ' evt: ' + j.event);
/** @todo remove disconnect & try to create permanent connection */
socket.disconnect();
} else { console.log('brc ' + 'error'.red ); }
});

如果我想将数据从 Node 传递到 php,我只需在我的 nodejs 服务器上执行 php 代码即可。像这样:

 socket.on('php', function(func, data, callback) {
/* some functions */
if (check_usr(session) === false) return;
console.log('php'.green + ' act:' + func);
var cmd = 'php -r \'$_COOKIE["MONSTER"]="' + session + '"; require(\"' + __dirname + '/' + php_[func].exec + '\");\'';
console.log(cmd);
cp.exec(cmd ,
function(err, stdout, stderr) {
if (err == null) {
console.log(typeof callback);
console.log(JSON.parse(callback));
if (callback != null) callback(stdout);
console.log(stdout);
//socket.emit('php', {uid: uid, o: stdout});
console.log('emitted');
} else {
console.log('err '.red + stdout + ' ' + stderr);
}
});
});

关于php - 使用 PHP 和 Node.js 的 Websocket,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27011986/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com