centos php 开启socket,centos下phpsocket连接,该如何解决
centos下php socket連接
最近要做一個基于tcp/ip下的短連接
我們自己的代碼使用的是php的socket連接,對方服務器,已經測試能夠連接,并接收到對方傳回來的數據;
現在要求我們自己也需要搭建一個socket服務器,要求對方也可以連接我們服務器,獲取相關數據。
以前沒有做個socket連接,剛剛接觸
服務器也已經設置了一個端口好,可以telnet訪問
看網絡很多關于socket的php介紹,一些例子也使用了,服務器端的文件,總是不能被訪問返回數據
有朋友做個這方面的嗎?
幫忙一下
怎么寫服務器端文件,怎么實時監(jiān)聽到該socket端口有socket請求,并返回數據個對方
謝謝了
------解決方案--------------------
是的,端口被打開了就不能復用
所以通訊時需要先打開一個周知的端口,一旦監(jiān)聽到該端口有信息時
就需要打開一個空閑端口,并將該端口通知對方,用于后續(xù)的通訊
服務方的主監(jiān)聽程序需要常駐內存,只能啟動一次
通訊是通過子進程進行的
需要注意的是:php 適合做客戶端,而不適合做服務端
可能以后更高的版本會有所改變,至少在php5.5也還是沒有改變(雖然已經列入開發(fā)計劃)
------解決方案--------------------
如果你需要xml進行通信的話,webservice就是最好的選擇。你可以了解一下webservice,比如soap。你只要開放webservice對方調用就可以,而且對方可以是任何語言或程序。
------解決方案--------------------
樓主要的東西其實就是RPC,我有一個,你可以直接拿去用,
https://github.com/walkor/workerman
開發(fā)文檔在:http://www.workerman.net/documentation
安裝部署開發(fā)都非常方便。
如果有啥不明白,可以隨時聯(lián)系我
------解決方案--------------------
//server.php
set_time_limit(0);
// Set up our socket
$commonProtocol = getprotobyname("tcp");
$socket = socket_create(AF_INET, SOCK_STREAM, $commonProtocol);
socket_bind($socket, '192.168.10.224', 50004);
socket_listen($socket,5);
// Initialize the buffer
$buffer = "";
while(true)
{
$run=file_get_contents("./run.txt");
if($run==0)break;
// Accept any connections coming in on this socket
$connection = socket_accept($socket);
printf("Socket 鏈接中\(zhòng)r\n");
// Check to see if there is anything in the buffer
if($buffer != "")
{
printf("寫入開始 緩沖區(qū)內容發(fā)送..\r\n");
socket_write($connection, $buffer . "\r\n");
printf("寫入結束 \r\n");
}
else
{
printf("緩沖區(qū)無數據\r\n");
}
// Get the input socket_read($connection, 1024)
while($data = socket_read($connection, 4096))
{
if($run==0)break;
$buffer = $data;
//寫入客戶端數據
file_put_contents("./txt.txt", json_encode($data)."\n",FILE_APPEND);
socket_write($connection, "Information Received\r\n");
printf("讀結束 緩沖區(qū)內容: " . $buffer . "\r\n");
}
socket_close($connection);
printf("關閉 socket\r\n\r\n");
}
//命令行里 輸入: php server.php
//client.php 直接瀏覽器訪問
$stime = microtime(true);
$fp = stream_socket_client("tcp://192.168.10.224:50004", $errno, $errstr, 30,STREAM_CLIENT_CONNECT
------解決方案--------------------
STREAM_CLIENT_PERSISTENT);
if (!$fp) {
echo "$errstr ($errno)
\n";
} else {
fwrite($fp,$msg,mb_strlen($msg));
echo fread($fp, 4096)."\n";
fclose($fp);
}
$etime = microtime(true);
echo "Time: " . ($etime - $stime) . "n";
//我目前殺掉占用端口太麻煩,直接用文件控制退出 。run.txt 文件存 0或1 本條技術文章來源于互聯(lián)網,如果無意侵犯您的權益請點擊此處反饋版權投訴 本文系統(tǒng)來源:php中文網
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的centos php 开启socket,centos下phpsocket连接,该如何解决的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 成本率怎么算
- 下一篇: 动态规划算法php,php算法学习之动态