背景:对于swoole这样的Server想灵活的实现不同端口间(tcp/websocket/httpd) 的通讯,用swoole自己的table可能更能灵活处理一些逻辑fd的发送,这块简单,不支持搜索,能基本上满足简单业务需求,当然更复杂可以用Redis/Mysql,显然这个是针对物联网的,因为这个表大小由自己定,多了就没法再写入了。
使用备注:只有在swoole_server->start()之前创建的table对象才能在子进程中使用
swoole_table构造方法中指定了最大容量,一旦超过此数据容量将无法分配内存导致set操作失败。所以使用swoole_table之前一定要规划好数据容量
<?php $table = new swoole_table(1024); $table->column('fd', swoole_table::TYPE_INT); $table->column('from_id', swoole_table::TYPE_INT); $table->column('data', swoole_table::TYPE_STRING, 64); $table->create(); $serv = new swoole_server('127.0.0.1', 9501); //将table保存在serv对象上 $serv->table = $table; $serv->on('receive', function ($serv, $fd, $from_id, $data) { $ret = $serv->table->set($fd, array('from_id' => $data, 'fd' => $fd, 'data' => $data)); $swoole_table_ret = $serv->table->get($fd); print_r($swoole_table_ret); }); $serv->start();
[root@a ~]# telnet 127.0.0.1 9501
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
Connection closed by foreign host.
[root@a ~]# telnet 127.0.0.1 9501
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
jack
php swoole_table.php
Array
(
[fd] => 1
[from_id] => 0
[data] => 0
)
参考:
http://wiki.swoole.com/wiki/page/292.html
http://wiki.swoole.com/wiki/page/259.html