2023-11-01 分類: 網站建設
linux萬物皆文件
socket通信
基礎進制轉換
這篇文章是自己練習的內容,主要想實現應用間的通信機制。
與其它mvc框架結合建議以上圖的方式(ThinkpHp為例):
1、ThinkpHp與Workerman是兩個獨立的系統,獨立部署(可部署在不同服務器),互不干擾。
2、ThinkpHp以HTTp協議提供網頁頁面在瀏覽器渲染展示。
3、ThinkpHp提供的頁面的js發起websocket連接,連接workerman
4、連接后給Workerman發送一個數據包(包含用戶名密碼或者某種token串)用于驗證websocket連接屬于哪個用戶。
5、僅在ThinkpHp需要向瀏覽器推送數據時,才調用workerman的socket接口推送數據。
6、其余請求還是按照原本ThinkpHp的HTTp方式調用處理。
總結:
把Workerman作為一個可以向瀏覽器推送的通道,僅僅在需要向瀏覽器推送數據時才調用Workerman接口完成推送。業務邏輯全部在ThinkpHp中完成。
我們使用swoole環境的常駐內存、協程特性來做一些其他事務,如:任務隊列及其消費、緩存、異步執行等情況時
可以如建議中第5步所說,FpM環境調用Swoole環境提供的接口(可以用TCp/HTTp等方式)來開始一個任務
上面的方案可以用在單機中,也可以用在集群部署中。
進程通信一般僅限于單機中使用
進程通信的方式有好幾種,這里主要寫明我測試的一種。
在linux環境中,萬物皆為文件,套接字也可以用文件來表示,然后一個進程(一般是swoole環境)監聽它,其他進程(FpM環境)連接它,并且發送數據
這里使用的是Easyswoole框架提供的一個基類,如果是純Swoole環境可以下載框架源碼并查看原理
繼承了 AbstractUnixprocess ,封裝好了很多內容,直接寫明onAccept 接受數據做處理即可
\;
\\\\;
\\;
{
(Socket $socket)
{
$header = $socket->recvAll(, );
(strlen($header) != ) {
$socket->sendAll(::pack(json_encode([
=> ,
=> ,
], )));
$socket->close();
;
}
$allLength = ::packDataLength($header);
$data = $socket->recvAll($allLength, );
(strlen($data) == $allLength) {
$data;
$socket->sendAll(::pack(json_encode([
=> ,
=> ,
], )));
$socket->close();
}{
$socket->sendAll(::pack(json_encode([
=> ,
=> ,
], )));
$socket->close();
}
}
($string)
{
pack(, strlen($string)) . $string;
}
($head)
{
unpack(, $head)[];
}
}寫好了任務邏輯,還需要加入啟動該進程
EasySwooleEvent.php文件
(EventRegister $register)
{
$config = UnixprocessConfig();
$config->setSocketFile(EASYSWOOLE_ROOT.);
$config->setprocessName();
$siam = Siam($config);
ServerManager::getInstance()->getSwooleServer()->addprocess($siam->getprocess());
}$sock = dirname().;
$unixSock = stream_socket_client(.$sock);
fwrite($unixSock, siam_pack());
fclose($unixSock);
($string)
{
pack(, strlen($string)) . $string;
}
($head)
{
unpack(, $head)[];
}
當前題目:php-fpm應用與php-swoole應用進行通信
文章轉載:http://www.js-pz168.com/news3/291903.html
成都網站建設公司_創新互聯,為您提供云服務器、網站導航、品牌網站設計、品牌網站制作、外貿建站、企業建站
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯
猜你還喜歡下面的內容