首页
下载
文档
社区
视频
捐赠
源代码
赞助商
AOT 编译器
AI 助理
商业产品
PHP AOT 原生编译器
Swoole-Compiler 代码加密器
CRMEB 新零售社交电商系统
登录
注册
全部
提问
分享
讨论
建议
公告
开发框架
CodeGalaxy
发表新帖
websocket的聊天室问题
代码 websocket.php {{{ <?php $client = array();//存放所有客户端 $server = new swoole_websocket_server("0.0.0.0", 9501); $server->on('open', function (swoole_websocket_server $server, $request) { global $client; $client[$request->fd] = $request->fd;//链接的时候存储 }); $server->on('message', function (swoole_websocket_server $server, $frame) { global $client; $data = $frame->data; foreach ($client as $fd) {//当收到信息时,循环向所有的客户端发送这个数据 $server->push($fd, $data ); } var_dump($client);//服务端输出看看现在几个客户端 }); $server->on('close', function ($ser, $fd) { echo "client {$fd} closed\n"; }); $server->start(); }}} 附上 html的代码 {{{ <!DOCTYPE html> <html> <head> <title></title> <meta charset="UTF-8"> <script type="text/javascript"> var exampleSocket = new WebSocket("ws://0.0.0.0:9501"); exampleSocket.onopen = function (event) { exampleSocket.send("亲爱的服务器!我连上你啦!"); }; exampleSocket.onmessage = function (event) { console.log(event.data); } </script> </head> <body> <input type="text" id="content"> <button onclick="exampleSocket.send( document.getElementById('content').value )">发送</button> </body> </html> }}} 我发现个问题 我的$client 是全局变量,可是并没有存储到所有的客户端fd,这是为什么呢? 顺便请问,swoole的回调函数只能使用一般的函数名或者匿名函数两种方法吗?能不能是对象的一个方法呢?(请举个例子)
发布于9年前 · 2 次浏览 · 来自
提问
锋
锋云
代码 websocket.php {{{ <?php $client = array();//存放所有客户端 $server = new swoole_websocket_server("0.0.0.0", 9501); $server->on('open', function (swoole_websocket_server $server, $request) { global $client; $client[$request->fd] = $request->fd;//链接的时候存储 }); $server->on('message', function (swoole_websocket_server $server, $frame) { global $client; $data = $frame->data; foreach ($client as $fd) {//当收到信息时,循环向所有的客户端发送这个数据 $server->push($fd, $data ); } var_dump($client);//服务端输出看看现在几个客户端 }); $server->on('close', function ($ser, $fd) { echo "client {$fd} closed\n"; }); $server->start(); }}} 附上 html的代码 {{{ <!DOCTYPE html> <html> <head> <title></title> <meta charset="UTF-8"> <script type="text/javascript"> var exampleSocket = new WebSocket("ws://0.0.0.0:9501"); exampleSocket.onopen = function (event) { exampleSocket.send("亲爱的服务器!我连上你啦!"); }; exampleSocket.onmessage = function (event) { console.log(event.data); } </script> </head> <body> <input type="text" id="content"> <button onclick="exampleSocket.send( document.getElementById('content').value )">发送</button> </body> </html> }}} 我发现个问题 我的$client 是全局变量,可是并没有存储到所有的客户端fd,这是为什么呢? 顺便请问,swoole的回调函数只能使用一般的函数名或者匿名函数两种方法吗?能不能是对象的一个方法呢?(请举个例子)
赞
0
收藏
提问
分享
讨论
建议
公告
开发框架
CodeGalaxy
登录
后参与评论
评论
2016-12-24
老
老龐
因为swoole是多进程运行的,$client虽然是全局变量,但也仅仅是在当前进程内有效。请使用 $server->connections 迭代器来获取所有客户端连接。
赞
0
回复