use app\wifi_client\Lib\Gateway;
.....
\Lib\Gateway::sendToAll("i am here\n");
这样好像不行.
Unable to find 'app\workerman\applications\wifi_client\Lib\Gateway' in file: /var/www/yii2.0/workerman/applications/wifi_client/Lib/Gateway.php. Namespace missing?
网页上控制设备,主要是解决网页如何与workerman通讯问题。
一个实现方法大致如下:
可以通过网页提交表单的形式,向后台Web服务器POST数据,Web服务器收到网页请求后,向设备发送控制数据。
也就是浏览器->Web->Workerman->设备这样的数据流程
1、安装一个memcache服务器,workerman机器和Web机器都要装php的memcached扩展
2、确认applications/XXX/Config.php配置的是memcache存储($driver = self::DRIVER_MC;并配置memcache 的ip端口),ip为内网ip(非127.0.0.1,memcache无内网ip就配置成公网ip).
Gateway.conf 中 lan_ip配置成当前机器的内网ip(非127.0.0.1,无内网ip就配置成公网ip)
3、新建一个Web项目,例如叫web-manager,这个项目就是控制设备的网页程序,这个项目和workerman没有直接关系,可以使用你自己喜欢的框架thinkphp ci yii等,使用nginx php-fpm apache等运行
4、拷贝你的workerman项目applications/XXX到你的新Web项目中,例如重命名web-manager/client。拷贝的目的是使用web-manager/client/Lib/Gateway.php 及 对应的配置
5、在需要与workerman通讯的页面引用web-manager/client/Lib/Gateway.php文件,然后就可以调用\Lib\Gateway::sendToClient/sendToAll 给你需要的设备发送控制消息了
另外一个实现方法:
在网页中使用websocket,通过websocket与workerman直接建立socket连接,与其它设备通讯。注意的是你的设备应该不是websocket协议的,所以可能需要workerman支持两种协议,websocket协议及你设备使用的协议。其中websocket协议用与网页与workerman通讯,设备协议用与设备与workerman通讯。
支持双协议可以参考下面的连接:
双gateway worker 支持双协议:http://wenda.workerman.net/?/question/112
单gateway worker 支持双协议:http://wenda.workerman.net/?/question/57
use app\wifi_client\Lib\Gateway;
.....
\Lib\Gateway::sendToAll("i am here\n");
这样好像不行.
Unable to find 'app\workerman\applications\wifi_client\Lib\Gateway' in file: /var/www/yii2.0/workerman/applications/wifi_client/Lib/Gateway.php. Namespace missing?
我想知道,workerman和设备间如何通讯呢?通过什么协议?换种说法是通过什么途径啊?telnet?!
不太懂,求解~
客户端建立个socket去连workerman,以种协议通过这个socket发送数据,协议可以自己定义,比如简单的 长度+json这种
谢谢.
照你的做法, 已经可以用了.
Gateway.php中这句引起了一些问题. 建议这样改.
-require_once __DIR__ . '/Autoloader.php';
+require_once(dirname(__FILE__). '/Autoloader.php');
这个区别是?
看起来应该没区别, 但不知道为什么, 这个地方让我调试了很久. 猜测可以是全局有地方定义了这个路径.