1

我试图从 PHP (CLI) 发送一个 GET 或 POST 请求到一个 Node.js/Sockets.IO 应用程序,只使用基本的 cURL。这是我到目前为止所拥有的,我可以看到对 node.js 的响应(来自 cli),但不能再进一步了。目前我只希望将参数发送到控制台。(我可以稍后扩展)

任何帮助都会很棒!

(仅供参考:我确实看过这个,来自 php 源的 Socket.io,但需要更多帮助。确切的代码会很棒)

PHP

$qry_str = "?msg_from_php=This_is_a_test123&y=20"; 
$ServerAddress = 'http://10.1.1.69/socket.io/1/websocket/TICWI50sbew59XRE-O';
$ServerPort = '4000';
$TimeOut = 20;
$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $ServerAddress. $qry_str);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Expect:'));
curl_setopt($ch, CURLOPT_PORT, $ServerPort);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $TimeOut);
curl_setopt($ch, CURLOPT_TIMEOUT, '3');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, true);

// not sure if it should be in an array
//$data = array('msg_from_php' => 'simple message!');
//curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$content = trim(curl_exec($ch));
curl_close($ch);
echo "  Sent! Content: $content  \r\n";

节点.JS

var express = require('express'), http = require('http');
var app = express();
var server = http.createServer(app);
var io = require('socket.io').listen(server);

io.configure('production', function(){
    io.enable('browser client minification');
    io.enable('browser client etag'); 
    io.enable('browser client gzip'); 
    io.set('log level', 1); 
    io.set('transports', ['websocket', 'flashsocket', 'htmlfile', 'xhr-polling', 'jsonp-polling']);
    io.set("polling duration", 30); 
});
server.listen(4000);  // 80,443, 843, 4000, 4001

io.sockets.on('connection', function (socket) {
    socket.on('msg_from_php, function (data) {
        console.log(data);
    });
});
4

1 回答 1

2

您正在尝试与 socket.io 服务器建立一个普通的 HTTP 连接,但 socket.io 不会说普通的 HTTP;它至少使用一个专门的握手协议,如果它使用 websocket 传输,它根本不会使用 HTTP。AFAIK 没有 socket.io 客户端的 PHP 实现。

幸运的是,看起来您的 PHP 应用程序需要按照自己的条件发送到您的节点应用程序,而不是相反,所以您需要做的就是使用 express 定义几个路由来实现 RESTful 接口;然后,您的 PHP 应用程序可以使用 cURL 发布到与相应路由对应的 URL。

于 2012-09-26T16:06:24.583 回答