智能家居php网站源码分享下载,智能家居app源码

大家好,如果您还对智能家居php网站源码分享下载不太了解,没有关系,今天就由本站为大家分享智能家居php网站源码分享下载的知识,包括智能家居app源码的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!

什么是Workerman?

Workerman是一款开源高性能异步PHPsocket即时通讯框架。支持高并发,超高稳定性,被广泛的用于手机app、移动通讯,微信小程序,手游服务端、网络游戏、PHP聊天室、硬件通讯、智能家居、车联网、物联网等领域的开发。支持TCP长连接,支持Websocket、HTTP等协议,支持自定义协议。拥有异步Mysql、异步Redis、异步Http、MQTT物联网客户端、异步消息队列等众多高性能组件。

搭建步骤

1.第一步我们先把workerman里需要用到的扩展composer下来吧

&34;:&34;,\n&34;:&34;,\n&34;:&34;,

2.第二步到官方网站把demo全部下载下来,然后放到我们项目中的目录

图片中我就把整个项目都放在了HTTP/Controller/Workerman中。

3.第三步我们需要把把以下3个文件的引用部分修改为以下。不然会报路径错误

start_businessworker,start_gateway,start_register

require_once__DIR__.&39;;

4.修改完成后我们就可以在liunx直接运行对应的启动文件

phpstart.phpstart-d

如果你是在window下就双击start_for_win.bat运行

5.运行成功后,你就应该可以看到以下的界面

到此我们搭建基于workerman的通信环境就已经完成。接下来我们就可以根据自己的项目需求进行开发。在此向大家重点说明。我们所有的聊天是逻辑都在目录中的Events.php进行修改。

下面我给大家贴一下我编写的部分份代码。

Event.php

<?php\n/**\n*Thisfileispartofworkerman.\n*\n*LicensedunderTheMITLicense\n*Forfullcopyrightandlicenseinformation,pleaseseetheMIT-LICENSE.txt\n*Redistributionsoffilesmustretaintheabovecopyrightnotice.\n*\n*@authorwalkor<walkor@workerman.net>\n*@copyrightwalkor<walkor@workerman.net>\n*@linkhttp://www.workerman.net/\n*@licensehttp://www.opensource.org/licenses/mit-license.phpMITLicense\n*/\n\n/**\n*用于检测业务代码死循环或者长时间阻塞等问题\n*如果发现业务卡死,可以将下面declare打开(去掉//注释),并执行phpstart.phpreload\n*然后观察一段时间workerman.log看是否有process_timeout异常\n*/\n//declare(ticks=1);\n\n/**\n*聊天主逻辑\n*主要是处理onMessageonClose\n*/\nuse\\GatewayWorker\\Lib\\Gateway;\n\nclassEvents{\n/**\n*作者:何志伟\n*当客户端连接上来的时候\n*创建时间:2018/10/25\n*@param$client_id此ID为gatewayworker自动生成ID\n*/\npublicstaticfunctiononConnect($client_id)\n{\nGateway::sendToClient($client_id,json_encode(array(\n&39;=>&39;,\n&39;=>$client_id\n)));\n}\n\n\n/**\n*有消息时\n*@paramint$client_id\n*@parammixed$message\n*/\npublicstaticfunctiononMessage($client_id,$message)\n{\n//debug\necho&39;REMOTE_ADDR&39;REMOTE_PORT&39;GATEWAY_ADDR&39;GATEWAY_PORT&34;.json_encode($_SESSION).&34;.$message.&34;;\n\n//客户端传递的是json数据\n$message_data=json_decode($message,true);\nif(!$message_data)\n{\nreturn;\n}\n\n//根据类型执行不同的业务\nswitch($message_data[&39;])\n{\n//客户端回应服务端的心跳\ncase&39;:\nreturn;\n//客户端登录message格式:{type:login,name:xx,room_id:1},添加到客户端,广播给所有客户端xx进入聊天室\ncase&39;:\n//判断是否有房间号\nif(!isset($message_data[&39;]))\n{\nthrownew\\Exception(&39;room_id&39;REMOTE_ADDR&34;);\n}\n\n//把房间号昵称放到session中\n$room_id=$message_data[&39;];\n$client_name=htmlspecialchars($message_data[&39;]);\n$_SESSION[&39;]=$room_id;\n$_SESSION[&39;]=$client_name;\n\n\n//获取房间内所有用户列表\n$clients_list=Gateway::getClientSessionsByGroup($room_id);\nforeach($clients_listas$tmp_client_id=>$item)\n{\n$clients_list[$tmp_client_id]=$item[&39;];\n}\n//$clients_list[$client_id]=$client_name;\n\n//转播给当前房间的所有客户端,xx进入聊天室message{type:login,client_id:xx,name:xx}\n$new_message=array(&39;=>$message_data[&39;],&39;=>$client_id,&39;=>htmlspecialchars($client_name),&39;=>date(&39;),&39;=>$message_data[&39;],&39;=>$message_data[&39;],\n&39;=>$message_data[&39;],&39;=>$message_data[&39;]);\nGateway::sendToGroup($room_id,json_encode($new_message));\nGateway::joinGroup($client_id,$room_id);\n\n//给当前用户发送用户列表\n$new_message[&39;]=$clients_list;\nGateway::sendToCurrentClient(json_encode($new_message));\nreturn;\n\n//客户端发言message:{type:say,to_client_id:xx,content:xx}\ncase&39;:\n//非法请求\nif(!isset($_SESSION[&39;]))\n{\nthrownew\\Exception(&39;room_id&39;REMOTE_ADDR&34;);\n}\n$room_id=$_SESSION[&39;];\n$client_name=$_SESSION[&39;];\n\n//私聊\n//if($message_data[&39;]!=&39;)\n//{\n//$new_message=array(\n//&39;=>&39;,\n//&39;=>$client_id,\n//&39;=>$client_name,\n//&39;=>$message_data[&39;],\n//&39;=>&34;.nl2br(htmlspecialchars($message_data[&39;])),\n//&39;=>date(&39;),\n//);\n//Gateway::sendToClient($message_data[&39;],json_encode($new_message));\n//$new_message[&39;]=&34;.htmlspecialchars($message_data[&39;]).&34;.nl2br(htmlspecialchars($message_data[&39;]));\n//returnGateway::sendToCurrentClient(json_encode($new_message));\n//}\n\n$new_message=array(\n&39;=>&39;,\n&39;=>$client_id,\n&39;=>$client_name,\n&39;=>&39;,\n&39;=>nl2br(htmlspecialchars($message_data[&39;])),\n&39;=>date(&39;),\n\n);\nreturnGateway::sendToGroup($room_id,json_encode($new_message));\n}\n}\n/**\n*当客户端断开连接时\n*@paraminteger$client_id客户端id\n*/\npublicstaticfunctiononClose($client_id)\n{\n//debug\necho&39;REMOTE_ADDR&39;REMOTE_PORT&39;GATEWAY_ADDR&39;GATEWAY_PORT&39;&34;;\n\n//从房间的客户端列表中删除\nif(isset($_SESSION[&39;]))\n{\n$room_id=$_SESSION[&39;];\n$new_message=array(&39;=>&39;,&39;=>$client_id,&39;=>$_SESSION[&39;],&39;=>date(&39;));\nGateway::sendToGroup($room_id,json_encode($new_message));\n}\n}\n\n}

客户端页面

<!DOCTYPEhtml>\n<htmllang=&34;>\n<head>\n<metacharset=&34;>\n<title>与{{$to->name}}的对话</title>\n<scripttype=&34;src=&39;js&34;></script>\n<scripttype=&34;src=&39;js&34;></script>\n<scripttype=&34;src=&39;js&34;></script>\n<linkhref=&39;css&34;rel=&34;rel=&34;>\n<linkhref=&39;css&34;rel=&34;rel=&34;>\n<linkhref=&39;css&34;rel=&34;rel=&34;>\n<scripttype=&34;src=&39;js&34;></script>\n\n{{–<scriptsrc=&34;></script>–}}\n\n</head>\n<style>fff;\noverflow:hidden;\nposition:absolute;\nborder:1pxsolid34;connect();&34;margin:auto;text-align:center;&34;margin:auto;&34;border:1pxsolidred;height:40px;width:500px;margin:auto;&34;width:80px;height:40px;border:1pxsolidblue;float:left&34;{{$to->heading}}&34;80px&34;40px&34;width:150px;height:40px;border:1pxsolidblue;float:left&34;content&34;width:500px;height:400px;border:1pxsolidgreen;margin-top:40px;overflow-y:auto&34;min-height:50px;margin-top:10px;&34;width:50px;height:50px;border:1pxsolidred;margin-left:10px;float:left&34;{{$to->heading}}&34;50px&34;50px&34;border:1pxsolidred;float:left;min-height:50px&34;min-height:50px;margin-top:10px;&34;width:50px;height:50px;border:1pxsolidred;margin-left:10px;float:right&34;{{$from->heading}}&34;50px&34;50px&34;border:1pxsolidred;float:right;min-height:50px&34;returnonSubmit();returnfalse;&34;ajaxfrom&34;hidden&34;to&34;{{$to->id}}&34;hidden&34;from&34;{{$from->id}}&34;hidden&34;room_id&34;{{$room}}&34;hidden&34;tag&34;{{$tag}}&34;textarea&34;content&34;Input_text&34;margin:0px;width:501px;height:213px;&34;say-btn&34;button&34;btnbtn-defaultfacepull-left&34;表情&34;submit&34;btnbtn-default&34;text/javascript&34;undefined&34;/swf/WebSocketMain.swf&34;&34;ws://&34;:7272&34;连接关闭,定时重连&34;出现错误&34;/get_record&34;room&34;{{$room}}&34;{{$tag}}&34;.content&39;<divstyle=&34;>&39;<divstyle=&34;>&39;<imgsrc=&34;width=&34;height=&34;>&39;</div>&39;<divstyle=&34;>&39;</div>&39;<div>&34;.content&39;<divstyle=&34;>&39;<divstyle=&34;>&39;<imgsrc=&34;width=&34;height=&34;>&39;</div>&39;<divstyle=&34;>&39;</div>&39;<div>&39;{&34;:&34;,&34;:&34;,&34;:&34;,&34;:&34;,&34;:&34;,&34;:&34;}&39;登录成功&39;type&39;ping&39;{&34;:&34;}&39;login&39;client_list&39;say&39;from_client_id&39;from_client_name&39;content&39;time&39;logout&39;init&34;/check_count&34;post&39;room&34;1&39;当前的对话已经超过次数,请购买对应服务&34;34;).val().replace(/&39;\\\\&39;).replace(/\\n/g,&39;).replace(/\\r/g,&39;);\n//ajax先把对应的内容发送到后台录入,回调成功后才把信息发送\nvarfm=$(&ajaxfrom&34;/record&34;post&34;0&39;{&34;:&34;,&34;:&34;,&34;:&34;,&34;:&39;+neirong+&34;}&34;34;).val(&34;);\n//强制定位光标\n$(&textarea&34;{{$from->name}}&34;.content&39;<divstyle=&34;>&39;<divstyle=&34;>&39;<imgsrc=&34;width=&34;height=&34;>&39;</div>&39;<divstyle=&34;>&39;</div>&39;<div>&34;.content&39;<divstyle=&34;>&39;<divstyle=&34;>&39;<imgsrc=&34;width=&34;height=&34;>&39;</div>&39;<divstyle=&34;>&39;</div>&39;<div>&34;34;).append(&34;speech_item&34;http://lorempixel.com/38/38/?&39;&34;user_icon&39;+from_client_name+&39;+time+&34;clear:both;&34;triangle-isoscelestop&39;+content+&39;).parseEmotion();\n}\n$(function(){\n//全局用户ID\nselect_client_id=&39;;\n\n//如果发送的用户有变化则对应的用户ID进行替换\n$(&client_list&34;34;).attr(&34;);\n});\n//表情选择\n$(&39;).click(function(event){\n$(this).sinaEmotion();\nevent.stopPropagation();\n});\n});\n\n//document.write(&34;viewport&34;width=device-width,initial-scale=1&39;);\n$(&34;).on(&34;,function(e){\n//按enter键自动提交\nif(e.keyCode===13&&!e.ctrlKey){\ne.preventDefault();\n$(&39;).submit();\nreturnfalse;\n}\n\n//按ctrl+enter组合键换行\nif(e.keyCode===13&&e.ctrlKey){\n$(this).val(function(i,val){\nreturnval+&34;;\n});\n}\n});\n</script>

上面是主要运行的核心代码。其他框架的自带参数需要各位自己去根据文档去调试优化。到此基于workerman的聊天用于功能demo已经搭建完毕。

领取方式:点赞关注小编后私信【资料】获取资料领取方式!

系统的学习PHP

1ThinkPHP5底层源码分析视频教程

2PHP7入门到进阶_难得的好教程

32020-Laravel6实战视频教程

4RestfulApi实战演练

5WebSocket网络实战2020最新版

视频教程不是给你收藏的,希望对提升你的学习技能有些许帮助吧!

领取方式:点赞关注小编后私信【资料】获取资料领取方式!

关于智能家居php网站源码分享下载的内容到此结束,希望对大家有所帮助。

Published by

风君子

独自遨游何稽首 揭天掀地慰生平