應(yīng)用場(chǎng)景
有一些硬件設(shè)備(3G模塊),注冊(cè)上之后會(huì)去連接服務(wù)器,服務(wù)端開了一個(gè)socket,走的是http協(xié)議,$webserver = new WebServer('http://0.0.0.0:8080');
這些設(shè)備連上之后,需要人工操作在前端發(fā)送一些指令給設(shè)備,需要怎么做?
前臺(tái)和workerman之間用websocket協(xié)議,workerman和設(shè)備之間用socket連接
可以使用gatewayWorker去做,開兩個(gè)端口,一個(gè)websocket協(xié)議端口與前端連,一個(gè)tcp端口與設(shè)備連。
業(yè)務(wù)邏輯都在event.php中寫,在這個(gè)event.php中可以控制二者通訊,具體參考gatewayWorker手冊(cè)
多協(xié)議支持部分:
http://workerman.net/gatewaydoc/advanced/multi-protocols.html
gatewayWorker代碼:
https://github.com/walkor/GatewayWorker
websoket demo
http://www.wtbis.cn/workerman-chat
gatewayWorker我沒用過,在event中的onMessage可以寫邏輯,那這邊onMessage是否可以同時(shí)支持websocket和設(shè)備的socket的回調(diào)?然后可以向指定的id發(fā)送具體消息?
/**
* 當(dāng)客戶端發(fā)來消息時(shí)觸發(fā)
* @param int $client_id 連接id
* @param string $message 具體消息
* @link http://gatewayworker-doc.workerman.net/gateway-worker-development/onmessage.html
*/
public static function onMessage($client_id, $message)
{
// 向所有人發(fā)送 @see http://gatewayworker-doc.workerman.net/gateway-worker-development/send-to-all.html
Gateway::sendToAll("$client_id said $message");
}