将PHP GET请求发送到Sockets.IO

时间:2012-09-26 14:27:52

标签: php node.js express socket.io

我尝试使用基本的cURL从PHP(CLI)向Node.js / Sockets.IO应用程序发送GET或POST请求。这是我到目前为止,我可以看到响应进入node.js(从cli),但不能得到任何更远。目前我只想将参数发送到控制台。 (我可以稍后再详述)

任何帮助都会很棒!

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

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";

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

1 个答案:

答案 0 :(得分:2)

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

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