Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 是否应该在服务器上异步运行此函数_Javascript_Mysql_Node.js_Logic - Fatal编程技术网

Javascript 是否应该在服务器上异步运行此函数

Javascript 是否应该在服务器上异步运行此函数,javascript,mysql,node.js,logic,Javascript,Mysql,Node.js,Logic,我对node js没有什么经验,但我正在开发一种类似于优步在地图上实时显示汽车的东西 所以我有一个sql数据库,里面有很多汽车和它们的gps位置。客户端将其gps坐标和半径发送到以下函数。现在有些是伪代码 var mysql = require('mysql'); var express = require('express'); var connection = mysql.createConnection({ host: "", port: , user: "",

我对node js没有什么经验,但我正在开发一种类似于优步在地图上实时显示汽车的东西

所以我有一个sql数据库,里面有很多汽车和它们的gps位置。客户端将其gps坐标和半径发送到以下函数。现在有些是伪代码

var mysql = require('mysql');
var express = require('express');

var connection = mysql.createConnection({
    host: "",
    port: ,
    user: "",
    password: "",
    database: ""
});

user.on('returnCars', function(gps, radius){    
     connection.query({
        sql: "SELECT * FROM cars WHERE radius = ?", 
            values: [username] },                   

                    function(error, results, fields) 
                    {           

                    if(results) 
                        {
                            user.emit('returnCars', results);
                        }
                    }
            });
     });
});
因此,正如sql查询arnt instant一样,如果有1000人同时运行此函数,它肯定会阻塞。我所有的研究都告诉我,这是正确的方法,所以唯一的选择是将其作为NYNC运行,对吗


还可以异步运行returnCars函数吗?我不确定是否因为connection/sql details变量不在函数或任何东西中,所以它会立即尝试读取它,因此可能应该放在函数或其他东西中。

代码太零碎,无法真正帮助您,但一般来说:

  • 如果您使用的是Node的内置HTTP服务或类似于Express的分层服务,那么当接收到请求时,您的代码将异步运行,而无需执行任何特殊操作

  • 如果您正在使用MySQL访问的任何主
    npm
    模块,那么用于进行查询的函数将异步运行,您无需做任何特殊的操作


在伪代码示例中,显示了
sqlQuery
函数替代项的回调。这可能就是您选择使用的MySQL访问模块的使用方式,可以是直接回调,也可以是承诺。

代码太零碎,无法真正帮助您,但一般来说:

  • 如果您使用的是Node的内置HTTP服务或类似于Express的分层服务,那么当接收到请求时,您的代码将异步运行,而无需执行任何特殊操作

  • 如果您正在使用MySQL访问的任何主
    npm
    模块,那么用于进行查询的函数将异步运行,您无需做任何特殊的操作


在伪代码示例中,显示了
sqlQuery
函数替代项的回调。这可能就是您选择使用的MySQL访问模块的使用方式,无论是直接回调还是承诺。

无论是否异步,服务器都必须做一些工作。FWIW,如果您想要Uber之类的东西,您可能还需要实时更新;您不希望只查询一次,而是希望在职位更新后立即通知所有人。如果涉及到数据库查询,这将不会很好地工作。您需要查看WebSocket以将更新推送到客户端。在某种意义上,客户会订阅某个感兴趣的领域。一旦服务器收到职位更新,它就会将其转发给所有相关订阅者。在这个过程中不需要数据库查询。哦,我从来没有这样想过,目前我有一个计时器,所以每5秒左右,这个功能将与客户端的新gps一起运行,我会研究你说的方法,我知道,谢谢你确实应该这样做。每5秒向每个客户发送一次所有positipn可能适用于几百个职位/客户,但websockets可以处理更多问题好的,我想你不可能有链接或任何关于这方面更详细的信息?我在代码方面找不到任何东西,无论它是否异步,服务器都必须做一些工作。FWIW,如果你想要Uber之类的东西,你可能还需要实时更新;您不希望只查询一次,而是希望在职位更新后立即通知所有人。如果涉及到数据库查询,这将不会很好地工作。您需要查看WebSocket以将更新推送到客户端。在某种意义上,客户会订阅某个感兴趣的领域。一旦服务器收到职位更新,它就会将其转发给所有相关订阅者。在这个过程中不需要数据库查询。哦,我从来没有这样想过,目前我有一个计时器,所以每5秒左右,这个功能将与客户端的新gps一起运行,我会研究你说的方法,我知道,谢谢你确实应该这样做。每5秒向每个客户发送一次所有positipn可能适用于几百个职位/客户,但websockets可以处理更多问题好的,我想你不可能有链接或任何关于这方面更详细的信息?我在代码方面找不到任何东西哦,对不起,我在使用express是的,我以前做过类似的mysql查询,我会再添加一些代码,这样会更清楚,但是如果你说的是,它都是异步运行的,那太神奇了,谢谢,对不起,我在使用express是的,我以前做过类似的mysql查询,我会添加更多的代码,这样会更清晰,但如果你说的是所有代码都是异步运行的,那就太棒了,谢谢