摘要:功能實現服務器,服務器使用相對成熟的實現。被廣泛的用于手機移動通訊,微信小程序,手游服務端網絡游戲聊天室硬件通訊智能家居車聯網物聯網等領域的開發。支持長連接,支持等協議,支持自定義協議。擁有異步異步異步異步消息隊列等眾多高性能組件。
基于Web實現遠程與硬件交互 項目背景:
最近在做一個類似“速遞柜”的項目,項目需求大概如下:
1.用戶使用微信掃描二維碼
2.后臺匹配相關數據,并存儲用戶信息,最終返回給用戶當前柜子當前狀態
3.用戶選擇“開柜”指令,進行存取物品
1.實現跟硬件進行數據交互,使用TCP/IP 長連接,意味著,我們要有一個TCP服務器,TCP服務器一方面接受用戶發過來的相關請求指令,另一方面完成發送指令給指定硬件這一操作。
2.除了TCP 服務器我們還需要一個 Websocket 服務器,也有兩個功能,一方面接受客戶端發送的指令,另一方面處理轉發用戶指令給TCP服務器。
TCP 服務器,Websocket 服務器 使用相對成熟的 Workman 實現。
Workerman是一款純PHP開發的開源高性能的PHP socket 服務器框架。被廣泛的用于手機app、移動通訊,微信小程序,手游服務端、網絡游戲、PHP聊天室、硬件通訊、智能家居、車聯網、物聯網等領域的開發。 支持TCP長連接,支持Websocket、HTTP等協議,支持自定義協議。擁有異步Mysql、異步Redis、異步Http、異步消息隊列等眾多高性能組件。GatewayWorker 目錄結構
├── Applications // 這里是所有開發者應用項目 │ └── YourApp // 其中一個項目目錄,目錄名可以自定義 │ ├── Events.php // 開發者只需要關注這個文件 │ ├── start_gateway.php // gateway進程啟動腳本,包括端口號等設置 │ ├── start_businessworker.php // businessWorker進程啟動腳本 │ └── start_register.php // 注冊服務啟動腳本 │ ├── start.php // 全局啟動腳本,此腳本會依次加載Applications/項目/start_*.php啟動腳本 │ └── vendor // GatewayWorker框架和Workerman框架源碼目錄,此目錄開發者不用關心
首先我們 Applications 復制兩份 YourApp 目錄下的文件,此時我們的目錄結構應該是這樣的
├── Applications // 這里是所有開發者應用項目 │ └── TcpServer // 其中一個項目目錄,目錄名可以自定義 │ ├── Events.php // 開發者只需要關注這個文件 │ ├── start_gateway.php // gateway進程啟動腳本,包括端口號等設置 │ ├── start_businessworker.php // businessWorker進程啟動腳本 │ └── start_register.php // 注冊服務啟動腳本 │ └── WSServer │ ├── Events.php │ ├── start_gateway.php │ ├── start_businessworker.php │ └── start_register.php │ ├── start.php // 全局啟動腳本,此腳本會依次加載Applications/項目/start_*.php啟動腳本 │ └── vendor // GatewayWorker框架和Workerman框架源碼目錄,此目錄開發者不用關心
修改以及配置 TCPServer,start_register.php 下我們不做任何修改,但需要注意的是register 必須是text協議
// register 必須是text協議 $register = new Register("text://0.0.0.0:1238");
2.修改 start_gateway.php
// gateway 進程,這里使用 TCP 協議,可以用telnet測試 $gateway = new Gateway("tcp://0.0.0.0:8282"); // gateway名稱,status方便查看 $gateway->name = "TcpGateway"; // gateway進程數 $gateway->count = 4; // 本機ip,分布式部署時使用內網ip $gateway->lanIp = "127.0.0.1"; // 內部通訊起始端口,假如$gateway->count=4,起始端口為4000 // 則一般會使用4000 4001 4002 4003 4個端口作為內部通訊端口 $gateway->startPort = 2900; // 服務注冊地址 $gateway->registerAddress = "127.0.0.1:1238";
3.修改 start_businessworker.php
// bussinessWorker 進程 $worker = new BusinessWorker(); // worker名稱 $worker->name = "TcpBusinessWorker"; // bussinessWorker進程數量 $worker->count = 4; // 服務注冊地址 $worker->registerAddress = "127.0.0.1:1238";
4.根據上面的操作,我們修改WSServer目錄下的文件,這個修改跟上面一樣的,但是要注意的是,兩個應用應該是不用的端口,所以需要修改的地方有兩個,start_gateway下的端口,還有start_register端口。!!!! 兩個應用下register 和 Gateway 端口一定不一致!!!
好了,到目前為止,我們已經完成了兩個服務器的創建,那么我們兩個服務器之間如何數據共享呢?答案很簡單,我們在ws服務下創建一個tcp 客戶端即可,讓tcp 客戶端與我們tcp 服務器連接就可以,然后通過tcp 客戶端直接發送相關數據給tcp服務器就可以,當然并不是所有數據都是通過這樣的方式共享的,我們其他信息還是通過共用一個數據庫來共享的。相關代碼如下:
public static function onConnect($client_id) { // 向所有人發送 $host = "127.0.0.1"; $port = 8282; global $socket; if (empty($socket)) { $socket = TcpClient::getInstace()->connect($host, $port); Gateway::sendToClient($client_id, "$client_id welcome "); } } public static function onMessage($client_id, $message) { if ($GLOBALS["socket"]) { // 數據指令解包 $message_arr = str_split(str_replace(" ", "", trim($message)), 2); $cmd=null; for ($j = 0; $j < count($message_arr); $j++) { //socket_write($GLOBALS["socket"], bin2hex($message_arr[$j])); socket_write($GLOBALS["socket"],chr(hexdec($message_arr[$j]))); } } }
好了,截止目前我們就完成了服務端工作,當然客戶端只是簡單的創建一個ws連接就好。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/28284.html
摘要:統計服務的調用次調和調用時間的監控中心。調用關系說明服務容器負責啟動,加載,運行服務提供者。服務提供者在啟動時,向注冊中心注冊自己提供的服務。調度中心基于訪問壓力自動增減服務提供者。 隨著互聯網的發展,網站應用的規模不斷擴大,常規的垂直應用架構已無法應對,分布式服務架構以及流動計算架構勢在必行,亟需一個治理系統確保架構有條不紊的演進。showImg(https://segmentfau...
摘要:服務提供方對外發布服務,服務需求方調用服務提供方所發布的服務。應用服務器通過統一數據訪問模塊訪問各種數據,減輕應用程序管理諸多數據源的麻煩。 原文地址:https://blog.coding.net/blog/General-architecture-for-Java-applications 當我們架設一個系統的時候通常需要考慮到如何與其他系統交互,所以我們首先需要知道各種系統之間是...
摘要:分鐘快速入門教程一歡迎來到世界與虛擬化在沒有的時代,我們會使用硬件虛擬化虛擬機以提供隔離。倉庫分為公開倉庫和私有倉庫,最大的公開倉庫是官方倉庫,國內的公開倉庫也有很多選擇,例如阿里云等。 30 分鐘快速入門 Docker 教程 一、歡迎來到 Docker 世界 1. Docker 與虛擬化 在沒有 Docker 的時代,我們會使用硬件虛擬化(虛擬機)以提供隔離。這里,虛擬機通過在操作系...
閱讀 1774·2021-10-19 13:30
閱讀 1344·2021-10-14 09:48
閱讀 1538·2021-09-22 15:17
閱讀 2011·2019-08-30 15:52
閱讀 3278·2019-08-30 11:23
閱讀 1990·2019-08-29 15:27
閱讀 896·2019-08-29 13:55
閱讀 755·2019-08-26 14:05