想用这个做物联网, 有什么可以指导一下吗

songzhao831

我现在是加了心跳功能来检测物体是否还在线. 用数据库来存这些相关的物体.
如果想从网页上去控制这个设备, 有什么好的方式, 我现在也用的一个socket去连的, workman里区别是web. 物体, 还是手机. 这种方式, 有其它更好的方式吗?

阅读 7396
2个回答

walkor

网页上控制设备,主要是解决网页如何与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

  • songzhao831 2014-11-14

    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?

  • leon 2014-11-24

    我想知道,workerman和设备间如何通讯呢?通过什么协议?换种说法是通过什么途径啊?telnet?!
    不太懂,求解~

  • walkor 2014-11-24

    客户端建立个socket去连workerman,以种协议通过这个socket发送数据,协议可以自己定义,比如简单的 长度+json这种

songzhao831

谢谢.

照你的做法, 已经可以用了.

Gateway.php中这句引起了一些问题. 建议这样改.

-require_once DIR . '/Autoloader.php';
+require_once(dirname(FILE). '/Autoloader.php');

  • walkor 2014-11-15

    这个区别是?

  • songzhao831 2014-11-15

    看起来应该没区别, 但不知道为什么, 这个地方让我调试了很久. 猜测可以是全局有地方定义了这个路径.