持久的mysql连接,无论用户是否连接?

时间:2015-05-05 14:41:17

标签: mysql node.js optimization websocket socket.io

我希望每个用户都使用一个单独的mysql连接,它始终选择数据并在满足特定条件时更新它(如已下标)。最优秀的是,如果没有用户访问该网站,即使可能,甚至可能?

所以,在过去的几天里,我一直在谷歌,努力想要解决我的问题,但似乎没有人有足够的知识来帮助我解决我的问题。所以我尽量简单地问我的问题,而不会让你的代码混淆。 (但如果您对查看代码感兴趣:http://pastebin.com/dRFzWtEH

然而,这完全是关于带有live-countdown-timer的拍卖网站,我只想运行每秒SELECT个数据的node.js服务器并将其发送到WebSocket以显示所有访问的用户该网站实时倒计时和价格更新(出价)。

我通过使用单一mysql查询完成了这整个任务,但随后我遇到了errors。然后GitHub node-mysql-module的作者建议我使用MySQL Pool。但是,根据我在这个问题的第一句中所说明的具体目标,没有任何内容可以找到。

现在我想问一下,我怎么能做到这一点,这是否可能,或者至少有一个用户必须在我的网站上?

代码/代码结构/逻辑过程是什么样的?

我想我根本不需要关闭连接,所以我不需要像connection.end()这样的函数?

1 个答案:

答案 0 :(得分:0)

不,不要担心连接池。这在MySQL中并不是什么大问题。

此外,“池”存在问题 - 必须清除所有设置,@变量,事务状态等,然后才允许下一个“客户端”使用池化连接。这可能需要一些时间,特别是如果客户端远离服务器。

与竞争产品不同,MySQL的连接/断开时间非常短。

如果您正在开发Web产品,请记住HTTP是“无状态”的。也就是说,您无法挂起从一个“页面”到下一个页面的连接。因此,不能保存“状态”。

修改

如果您遇到“跨越池塘”的延迟问题(美国和欧洲之间100-200毫秒),客户端连接池可能非常有用。但是,如果池软件正在注入重置事件的命令,那么可能会完全破坏池。

如果您可以打开“常规日志”(在托管服务中,您可能必须使用log_output=TABLE),请执行此操作以查看注入了哪些额外命令。

另外,考虑将多个客户端SQL语句组合到存储过程中以减少来回。

还要考虑将MySQL服务器移近客户端,或者将客户端移近MySQL服务器,具体取决于最终用户与客户端之间来回与MySQL流量的比较。