当涉及到数据库请求时,WebSockets可以取代AJAX吗



这似乎是一个非常愚蠢的问题,但我目前正在将我的网站从使用EventSource轮询构造函数切换到在Node.js中实现的WebSocket标准。

最初,我网站上的所有后台都是用PHP处理的。随着Node.js的引入,我试图在不脱离"标准"的情况下尽可能多地切换。按照标准,我的意思是,通常我看到的WebSocket实现发送小数据,然后接收小数据,而不是执行数据库查询,然后将大量数据发送回客户端。

当涉及到数据库请求时,WebSockets可以取代AJAX吗


让我们考虑PHP/JavaScript (AJAX)Node.js/JavaScript (WebSockets)中的一个小型hello world程序

PHP/JavaScript(AJAX)

// HelloWorld.php with Laravel in the Backend
Table::update([ 'column' => $_POST['message'] ]);
echo $_POST['message'];

带有自定义Ajax函数的Ajax.js

Global.request("HelloWorld.php").post({
message: "Hello World"
}).then(message => alert(message));

Node.js/JavaScript(WebSockets)

// skip all the server setup
server.on('connection', function () {
server.on('message', function (message) {
sqlConnection.query("UPDATE `table` SET `column` = ?", [message], function () {
server.send(message);
});
});
});

WebSocket.js:

let socket = new WebSocket('ws://example.com');
socket.onmessage = function (message) {
alert(message)
}
socket.send("Hello World");

它们本质上都做着相同的事情,只是方式略有不同。现在,在这种规模下,使用WebSockets是没有意义的。尽管是一个例子,但想象一下它已经扩展到Node.js处理更大的查询并向客户端发送大量数据的程度。这可以接受吗?

是的,理论上,您可以使用websocket触发数据库查询。HTTP和Websockets都是建立在TCP上的,TCP作为网络请求和响应之间的桥梁来完成传输数据的工作。

更大的问题是,Websockets旨在减轻打开/关闭网络端口的负担,而这对于ajax来说是必须的。这带来了几个应用程序级别的好处,包括实时媒体流。

那么,如果您没有特定的web套接字用例,那么坚持使用HTTP有什么好处呢?HTTP的构建有一个强大的工具生态系统——HTTP在很大程度上是即插即用的;玩想想安全性和标准化之类的东西。Web套接字是一项相对较新的技术,还没有开发出同样的生态系统。

最新更新