浏览器websocket
使用浏览器,PHP 来构建的应用,发现都是每次浏览器发送一次http 请求,PHP 回一个响应。
这样,后端的PHP 在处理多次http请求是,每次都是不同的进程在处理。 这就加大了开销, 而且,PHP 在处理多次的http请求时,前后多个PHP进程之间的感觉都没啥联系,
这些前后PHP进程之间怎么才能共享一些资源呢?比如,和第三方的tcp连接, 数据库连接, modbus tcp 的连接 能保持长连接, 前后多个PHP进程都可以共享,这样就不用每次
的PHP进程都要去重新建立tcp连接(太浪费资源了),
基于这些思考? 那有什么好的办法呢????
------------------------------------------------------
哈哈,这样浏览器websocket client 和服务端端PHP的websocket server 就可以通信上了, 测试成功!!nice
下面是具体的代码和方法步骤!
------------------------------------------------
客户端(浏览器), websocket 代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | < html > < head > < meta charset="UTF-8"> < title >Web sockets test</ title > < script type="text/javascript"> var ws; function ToggleConnectionClicked() { try { ws = new WebSocket("ws://47.88.215.46:9501");//连接服务器 ws.onopen = function(event){alert("已经与服务器建立了连接\r\n当前连接状态:"+this.readyState);}; ws.onmessage = function(event){alert("接收到服务器发送的数据:\r\n"+event.data);}; ws.onclose = function(event){alert("已经与服务器断开连接\r\n当前连接状态:"+this.readyState);}; ws.onerror = function(event){alert("WebSocket异常!");}; } catch (ex) { alert(ex.message); } }; function SendData() { try{ var content = document.getElementById("content").value; if(content){ ws.send(content); } }catch(ex){ alert(ex.message); } }; function seestate(){ alert(ws.readyState); } </ script > </ head > < body > < button id='ToggleConnection' type="button" onclick='ToggleConnectionClicked();'>连接服务器</ button >< br />< br /> < textarea id="content" ></ textarea > < button id='ToggleConnection' type="button" onclick='SendData();'>发送我的名字:beston</ button >< br />< br /> < button id='ToggleConnection' type="button" onclick='seestate();'>查看状态</ button >< br />< br /> </ body > </ html > |
客户端效果:
服务端PHP创建的websocket server 代码(使用了 swoole开源库):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | <?php //创建websocket服务器对象,监听0.0.0.0:9502端口 $ws = new swoole_websocket_server( "127.0.0.1" , 9502); //监听WebSocket连接打开事件 $ws ->on( 'open' , function ( $ws , $request ) { var_dump( $request ->fd, $request ->get, $request ->server); $ws ->push( $request ->fd, "hello, welcome\n" ); }); //监听WebSocket消息事件 $ws ->on( 'message' , function ( $ws , $frame ) { echo "Message: {$frame->data}\n" ; $ws ->push( $frame ->fd, "server: {$frame->data}" ); }); //监听WebSocket连接关闭事件 $ws ->on( 'close' , function ( $ws , $fd ) { echo "client-{$fd} is closed\n" ; }); $ws ->start(); |
把websocket server 跑起来:
标签:
websocket
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现