在php的swoole websocket服务端的onMessage回调函数中执行这条命令,结果数据库里面的内容完全和sql指定的不符合。 下面是这张表的DDL CREATE TABLE `gobang_rooms` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `black_uid` int(10) unsigned DEFAULT NULL, `black_seconds` mediumint(5) unsigned DEFAULT NULL COMMENT '黑方读秒', `white_uid` int(10) unsigned DEFAULT NULL, `white_seconds` mediumint(5) unsigned DEFAULT NULL, `last_player` tinyint(3) unsigned DEFAULT NULL, `create_time` int(1
以下是关于 swoole 的编程技术问答
问 题 swoole版本:1.9.2 需求: 类似直播的评论功能, 比如A房间下面显示A房间的评论 B房间下面显示B房间的评论.... 这个应该是个正常的需求吧.. 但是我现在发现一个问题, 就是 消息是发给所有在线链接者.. 就是相当于A下面的评论在 BCDEF 都能看到.. 这就很蛋疼了... 不知道啥问题.. 求各位大哥大姐帮帮忙看看. 公司很急呀 代码如下: on('open', function ($ws, $request) { $fd = $request->fd; echo "client-{$fd} is connect\n"; //$ws->push($request->fd, "hello, welcome\n"); }); //监听WebSocket消
问 题 下面是我遍历发送消息,总觉得这样做是不对的,但是看手册又找不到发送所有成员的函数,求助 $server = new swoole_websocket_server("0.0.0.0", 9502); $server->set(array( //'worker_num' => 4, 'daemonize'=>1 )); $server->on('open', function (swoole_websocket_server $server, $request) { echo "server: handshake success with fd{$request->fd}\n"; $_SESSION['group'][$request->fd]=$request->fd; }); $server->on('message', function (swoole_websocket_server $server, $
问 题 额,这应该是菜鸟级别的问题,但是看了文档我还是无从下手。 解决方案 php的socket是资源类型: resource(4) of type (Socket),也就是每个socket句柄都一个样子。。 而Linux C socket fd是个int整数,每个都是不同数字。 原生php做不到“主动对已经连接过来的,用户uid=123的那个用户,推送一条消息”, 但借助Swoole利用linux C实现的socket,我们可以实现“主动对已经连接过来的,用户uid=123的那个用户,推送一条消息”。 这里我们可以用System V最简单的share memory来进程间共享数据IPC,维护一个用户id与其socket连接的映射表。 代码如下: set(array( 'worker_num' => 8,
问 题 nginx 反向代理 swoole 的设置问题 首先版本 php 7.1.0 swoole 2.0.5 nginx 1.10.2 按官网说明http://wiki.swoole.com/wiki/p...,设置nginx反向代理到 swoole, server { root /alidata/www/vweb/; server_name 域名; location / { #添加了这个也不行 #try_files $uri $uri/ /index.php?$query_string; #下面这几行是swoole官网设定 if (!-e $request_filename) { proxy_pass http://127.0.0.1:9501; } proxy_http_version 1.1;
、 问题一:为什么这里还分为Server端和client端?想要使用swoole功能前需要运行server文件吗? 这就是swoole拓展的特色? 问题二:swoole的应用场景::很多人都说swoole适合做聊天室,为啥?因为异步,多线程吗?(FPM是多进程单线程吧?) 问题三:到底什么程度可以入swoole的坑? 目前我属于能够熟练应用 LAMP/LNMP(常年在linux下开发,所以在linux下装拓展,开发什么的还算熟悉),nosql(memcached,redis,mangodb),数据结构+C有所了解的菜鸡。适合入坑吗? 问题四:swoole框架和swoole拓展之间有怎样的联系吗?
问 题 为什么使用PHP的扩展Swoole的时候,目前指的是swoole_http_server。 我从框架中返回内容,然后通过Swoole发还给浏览器前, 需要使用ob_*系列操作一趟,才可以把内容刷出呢!????!?! 求解,到底是什么情况下才需要用到ob_系列呢,之前也遇到过验证码突然要用ob_。 解决方案 swoole是作为CLI程序跑的,如果不用ob_*而直接echo的话会输出到STDOUT里面,而不会返回给浏览器。 ob_*系列函数可以把echo的内容缓存下来,然后获取到某个变量里面,这样通过HTTP就可以发送给浏览器了。 如果直接return一个字符串给swoole的话应该也是不需要使用ob_*的。但是某些PHPer会习惯写echo xxx,为了兼(jiao)容(guan)这些PHPer,所以干脆统一用ob_start...ob_get_contents这样的方式。
问 题 Q1 connect($conf, function ($db, $r) use (&$result) { $result[] = 1; }); (new swoole_mysql)->connect($conf, function ($db, $r) use (&$result) { $result[] = 2; }); 如何判断上面两个 asyncIO 已经全部执行结束了,以便于我输出 $result ? Q2 connect($conf, function($db, $r) use (&a) { $a = 2; }); while ($a != 2) continue; echo $a; 以上这段代码有什么错误吗? 为什么 echo $a 永远不会执
问 题 比如说某一个客户端连上我的websocket服务端之后一直给我发送垃圾信息ddos我,我想设置成那个客户端十秒钟之内只能给websocket服务端发送一次消息,如何做?这个是在swoole编写的服务端脚本中用代码来实现还是在其他层面来防范? 解决方案 以前根据memcache的原子特性做过类似的功能 $microtime = microtime(true); //10微秒以内发送2次就报错,最小精确到10微秒,可以把间隔调大,比如调到100微秒,就改成$microtime = substr($microtime,0,-2); $microtime = substr($microtime,0,-1); $key = "safe_{$microtime}"; $memcached = new Memcached; $memcached->addServer( "127.0.0.1","11211",1 ); if (!$memcached->add($key