使用node.js作为tcp服务器,我将管理相对大量的GPS设备(~3000设备),并且第一步只是将输入数据存储在数据库中,但即使在这个阶段,我也想到了一些令人烦恼的性能问题我和我想在他们咬我之前抓住他们.
1 – 使用java或ruby等语言查看编写类似的服务器我看到如下代码:
java的
Thread serverThread = new Thread(() -> { System.out.println("Listening to server port 9000"); while (true) { try { Socket socket = serverSocket.accept(); ...
ruby
require 'socket' server = Tcpserver.new ("127.0.0.1",8080) loop do Thread.start(server.accept) do |client| ...
这似乎是它们为每个连接到tcp服务器的设备(套接字)提供单独的线程?由于node.js是单线程的并且是异步的,我应该关注传入的连接还是类似以下简单的方法会满足大量的同时连接?
net.createServer(function(device) { device.on('data',function(data) { // parse data // store in database }); });
2 – 我应该使用连接池限制数据库连接吗?由于数据库还从另一端查询GIS和监控,池大小应该是多少?
3 – 我如何在这样的系统中受益于缓存(例如使用redis)?
如果有人对这个想法有所了解,那应该会很棒.我也愿意听到您在实施此类系统时可能遇到或意识到的任何其他性能想法.谢谢.
解决方法
>在您列出的选项中进行选择我会说NodeJS实际上是一个更好的用例选项,因为它不像其他两个选项那样每个连接使用一个线程.线程通常是给定机器上的有限资源.
Java和
Ruby确实有”evented’服务器,如果你想要苹果与苹果的比较,这些值得关注. >如果您需要有关连接池的建议,我认为您需要更多地了解您打算使用的数据库.但是,如果设置成本高昂,重用连接将是一件好事.使用该工具来配置池的最小和最大大小可能是个好主意.最终使用的正确尺寸是测试问题. >我认为在这个系统中缓存的好处是最小的,因为你主要是写数据.如果数据有价值,您将需要将其写入磁盘而不是内存.另一方面,如果你有客户正在阅读收集的数据,也许缓存他们的读取像Redis可能是一个好主意.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。