从PHP发送消息到Node.js

从PHP发送消息到Node.js,第1张

从PHP发送消息到Node.js

与其他任何客户端一样,建议似乎是通过HTTP接口与节点对话。您可以使用php中的cURL通过HTTP与节点对话

请参阅:http
:
//groups.google.com/group/socket_io/browse_thread/thread/74a76896d2b72ccc/216933a076ac2595?pli=1

特别是,请参阅Matt Pardee的这篇文章

我遇到了一个类似的问题,希望让用户知道已添加到错误的新注释,以及类似的通知,这些通知实际上只能从PHP有效地发送到我的Node服务器。我所做的工作(如果发送时出现乱码且未格式化,则表示歉意,如果这样做,我很乐意将代码粘贴到其他位置):首先,您需要使用PHP中的cURL。我为此类编写了一个函数,如下所示:

function notifyNode($type, $project_id, $from_user, $data) {    $ch = curl_init();    curl_setopt($ch, CURLOPT_URL, 'http://127.0.0.1');    curl_setopt($ch, CURLOPT_HEADER, 0);    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Expect:'));    curl_setopt($ch, CURLOPT_PORT, 8001);    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 2);    curl_setopt($ch, CURLOPT_POST, true);    $pf = array('f' => $type, 'pid' => $project_id, 'user_from' =>

$from_user,
‘data’ => array());

    foreach($data as $k => $v) {        $pf['data'][$k] = $v;    }    curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($pf));    curl_exec($ch);    curl_close($ch);}

您会注意到,由于PHP和NodeJS都在同一服务器上运行,因此我在同一服务器上发送了cURL请求,因此您的行程可能会有所不同。我将此代码设置为连接的端口是8001(这是运行Node服务器的端口,也是socket.io服务器连接的端口)。这将发送一个HTTP
POST请求,其中的post字段已编码。这些都是非常标准的cURL东西。

在您的Node应用程序中,您可能会有类似以下内容:

var server = http.createServer(function(req, res) {});server.listen(8001);var io = io.listen(server, { transports: ['websocket', 'flashsocket',

‘xhr-polling’] });

...

好吧,我们将在http.createServer部分上进行扩展,以侦听来自本地主机(“
127.0.0.1”)的连接。然后,createServer代码变为:

var server = http.createServer(function(req, res) {    // Check for notices from PHP    if(res.socket.remoteAddress == '127.0.0.1') {        if(req.method == 'POST') { // The server is trying to send us an activity message var form = new formidable.IncomingForm(); form.parse(req, function(err, fields, files) {     res.writeHead(200, [[ "Content-Type", "text/plain"]  , ["Content-Length", 0]  ]);     res.write('');     res.end();     //sys.puts(sys.inspect({fields: fields}, true, 4));     handleServerNotice(fields);   });        }    }});

从那里可以实现handleServerNotice函数。

function handleServerNotice(data) {        ...}

等等等等。我已经有一段时间没有对此进行测试了,实际上,代码块已在我的节点服务器上被注释掉了,所以我希望我粘贴到这里的内容能够起作用-
总的来说,这一概念已经得到证明,并且我认为它将为您工作。无论如何,只是想确保您知道已经过去了几个月,所以我不确定为什么要发表评论。我编写的代码进行了一些研究(例如在cURL中设置“
Expect:”标头),当它最终起作用时,我感到非常兴奋。让我知道您是否需要其他帮助。

最好,

马特·帕迪



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5172275.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-18
下一篇 2022-11-18

发表评论

登录后才能评论

评论列表(0条)

保存