aardio 官方社区

 找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
查看: 6798|回复: 3

启用JSON-RPC服务器数据库句柄复用问题

[复制链接]

5

主题

17

回帖

142

积分

一级会员

积分
142
发表于 2017-12-22 19:51:50 | 显示全部楼层 |阅读模式
问题描述:

         开启JSON-RPC服务,每当客户端一个连接过来,都需要连接一次数据库,获取对象句柄,然后操作数据库,感觉开销很大,而且可能会导致一些问题;

所以希望:
      
          所有连接都使用一个数据库对象。

尝试过:
  
           采用 线程共享表 保存数据库对象,在每个连接中 读取出来, varDump 这个数据库对象,看起来正常,但是执行exec()时,提示mysql_real_query
错误。


求复用数据库对象的方法。

170

主题

2184

回帖

1万

积分

管理员

积分
13236
发表于 2017-12-22 20:24:19 | 显示全部楼层
你的话说反了,
服务器的资源是有限的,数据库连接用完就关闭,
如果不关闭你的服务端很快就会挂掉。因为你不可能一直使用数据库,但是你却一直打开连接,这显然是个馊主意。

但是你只有几个人访问,流量很小的时候,你可以保持连接不关闭。

至于多客户端共享数据库连接,这个想法太理想化了。
这等于要求所有客户端共用一个套接字,然后再多用户连接,你就觉得不用多占资源是一个道理。
而且多线程大家一起读和写同一个数据库,会制造不必要的冲突和混乱。

数据库的优化应当使用缓存方案,而不是保持连接,例如memcached,redis这些东西。
但是一般的网站根本不必要用缓存,缓存也会带来很多坑很多问题,所以不要乱优化,很多时候把代码写好一点,比追求这些东西要强。

170

主题

2184

回帖

1万

积分

管理员

积分
13236
发表于 2017-12-22 20:37:03 | 显示全部楼层
目前 aardio提供的几个HTTP服务器。

FastCGI是运行在单线程环境下的,前面的数据库连接你不关闭,后面请求过来可以接着使用。

asynHttpServer 以及基于 asynHttpServer的 WebSocket服务器这些,都是单线程异步的,所以数据库连接不关闭都可以继续使用。

至于 wsock.tcp.simpleHttpServer 他是运行在线程池中的,你不关闭数据库连接,后面的人也可以继续使用。

但建议你不要这么做,不必要的把简单 的事搞复杂了。

5

主题

17

回帖

142

积分

一级会员

积分
142
 楼主| 发表于 2017-12-23 15:04:24 | 显示全部楼层
好吧,谢谢!
我先这样用着,有问题了再考虑优化的办法
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

手机版|未经许可严禁引用或转载本站文章|aardio.com|aardio 官方社区 ( 皖ICP备09012014号 )

GMT+8, 2024-4-15 04:47 , Processed in 0.053981 second(s), 22 queries .

Powered by Discuz! X3.5

Copyright © 2001-2023 Tencent Cloud.

快速回复 返回顶部 返回列表