gpt4 book ai didi

node.js - 使用套接字代替ajax进行客户端/服务器通信

转载 作者:太空宇宙 更新时间:2023-11-03 22:01:54 26 4
gpt4 key购买 nike

在此node.js论坛应用程序中https://github.com/designcreateplay/NodeBB ,它允许您关注网站上的其他用户,我注意到它似乎使用套接字来传达我本来希望通过 ajax post 请求传达的信息。例如,当您单击按钮关注另一个用户(此论坛软件允许)时,客户端上的套接字会发出“api:user.follow”事件,然后在服务器上监听该事件,如下所示。

你能解释一下为什么有人愿意或不愿意使用套接字而不是 ajax 来实现这种类型的功能吗?我认为各有利弊,但我不知道。

客户端

followBtn.on('click', function() {
socket.emit('api:user.follow', {
uid: theirid
}, function(success) {
if (success) {
followBtn.addClass('hide');
unfollowBtn.removeClass('hide');
app.alertSuccess('You are now following ' + username + '!');
} else {
app.alertError('There was an error following' + username + '!');
}
});
return false;
});

服务器

   socket.on('api:user.follow', function(data, callback) {

if (uid) {
user.follow(uid, data.uid, callback);
}
});

最佳答案

NodeBB 不使用套接字:它使用 Socket.io ,这是一个库,使您能够在浏览器和服务器之间使用“实时”通信。

您可以在互联网上轻松找到 AJAX 与 Socket.io 的比较,但这里有一些区别:

  • Socket.io 在客户端和服务器之间使用一个持久连接;而每个 AJAX 请求都使用一个新连接,这意味着发送冗长的 HTTP header 、cookie 等。
  • Socket.io 消息无法缓存,AJAX 请求可以
  • Socket.io 提供命名空间、 volatile 消息、广播...

在论坛的特定情况下,使用 Socket.io 的主要优点是提供实时功能,例如在线程上立即显示新消息,这些消息会自动从服务器推送到客户端。如果某些消息可以使用 AJAX 发送(例如关注用户),我想开发人员不想引入使用两种不同技术在客户端和服务器之间进行通信的心理开销,因为 Socket.io 也可以处理这些消息很好。

编辑:正如评论中所指出的,Socket.io 根据浏览器选择传输协议(protocol)。 Websocket 是首选,但如果需要,它可以切换到 AJAX 长轮询或 iframe。

关于node.js - 使用套接字代替ajax进行客户端/服务器通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20596859/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com