R軟體 svSocket Server + PHP Socket Client

R 軟體中有一個 svSocket 套件可以讓 R 成為 Socket Server,其優點是啟動 Server 後轉為背後執行,R 軟體可以繼續作其他事情,但目前僅找得到 R 與 tcl 相對於 svSocket 的 Client 程式範例。以下是我用 PHP 當作 Socket Client 連接後端 R svSocket Server 的測試結果。

Step 1. 在 R 軟體中執行以下指令:

library(svSocket)
startSocketServer(port = 6011)

Note:
(1) 防火牆要解除對 localhost port 6011 的封鎖。
(2) 可用 stopSocketServer(port = 6011) 停止 Server 運作。

Step 2. 寫一個可在 local 網站中執行的 PHP 程式, 例如 svClient.php:

<?php
set_time_limit(0);

$host="127.0.0.1";
$port = 6011;

$fp = fsockopen ($host, $port, $errno, $errstr,10);
$out = "";
if (!$fp)
$out = "Error: could not open socket connection";
else
{
$in = "<<<e>>>(rnorm(100))<<<n>>>log(2.3)\r";
fputs ($fp, $in);
$out = fread($fp, 102400);
fclose ($fp);
}
// assume socket server in Windows OS
$out = iconv("big5","utf-8",$out);
echo nl2br($out);
?>

說明:<<<e>>> 是讓 svSocket 把接收到的字串當成 R 的程式碼跑出結果,<<<n>>> 是換行符號

Step 3. 用瀏覽器連線到 http://127.0.0.1/svClient.php

網頁的輸出結果如下: