swoole的TCP连接都是以数字的方式提供给PHP端的,在PHP代码中只需要保存fd/from_id这2个数字,即可向对应的连接发送数据。swoole本身也提供了可以遍历所有连接的函数接口(swoole_connection_list/swoole_connection_info)。这两个函数在EventWorker/TaskWorker均可调用。
但只能保存与网络服务相关的数据,如来源端口,客户端IP,客户端port等信息。swoole本身没有提供操作共享内存的接口,如果业务代码中希望保存额外的信息,或在worker进程之间共享数据,可以使用第三方的工具库。
单机环境单应用
可以使用apc扩展提供的apc_store/apc_fetch/apc_delete来保存数据。apc是使用锁+共享内存实现的,性能最好。但只能用于单个Swoole的服务器实例,并且数据是非持久化的,Server结束时数据会被清空。
if(pcntl_fork() > 0)
{
apc_store("hello", "swoole");
sleep(10000);
}
else
{
usleep(1000);
echo "Child:",apc_fetch("hello2");
}
单机跨应用
levelDB/rocksdb或者读写文件。文件读写时应当加锁,可以使用swoole提供的swoole_lock类。当然也可以直接使用分布式的存储,如memcache/mysql/redis等。
分布式环境
使用memcache/mysql/redis/ttserver等存储服务。
转自:http://rango.swoole.com/archives/248#comment-662
但只能保存与网络服务相关的数据,如来源端口,客户端IP,客户端port等信息。swoole本身没有提供操作共享内存的接口,如果业务代码中希望保存额外的信息,或在worker进程之间共享数据,可以使用第三方的工具库。
单机环境单应用
可以使用apc扩展提供的apc_store/apc_fetch/apc_delete来保存数据。apc是使用锁+共享内存实现的,性能最好。但只能用于单个Swoole的服务器实例,并且数据是非持久化的,Server结束时数据会被清空。
if(pcntl_fork() > 0)
{
apc_store("hello", "swoole");
sleep(10000);
}
else
{
usleep(1000);
echo "Child:",apc_fetch("hello2");
}
单机跨应用
levelDB/rocksdb或者读写文件。文件读写时应当加锁,可以使用swoole提供的swoole_lock类。当然也可以直接使用分布式的存储,如memcache/mysql/redis等。
分布式环境
使用memcache/mysql/redis/ttserver等存储服务。
转自:http://rango.swoole.com/archives/248#comment-662
727

被折叠的 条评论
为什么被折叠?



