gpt4 book ai didi

node.js - 仅根据移动应用程序的需求使用 websockets(通过 socket.io)的模式

转载 作者:太空宇宙 更新时间:2023-11-04 02:26:34 25 4
gpt4 key购买 nike

我正在开发一个移动应用程序,有时需要近乎实时的更新,因此我希望在必要时使用 websockets。一些早期测试似乎表明,始终使用 Websocket 可以使我手机上的数据连接不断打开,从而导调用池消耗更快。

所以我认为大多数时候使用常规的 ajax 样式请求并且仅在必要时使用 websockets 会更有效。

我是 socket.io 的新手 - 它是否提供任何手动“降级”连接的方法?如果没有,我会想要在其之上有一个通信层 - 谁能建议在 socket.io 之上建立一个层,允许我在 websocket 和常规 ajax 连接之间手动切换?

最佳答案

我不确定您想要什么样的层,或者您认为这样的层有什么要求?

对于 webSocket,您可以在需要时从客户端打开它,然后在不再需要时从客户端关闭它。只要保留一个打开/关闭标志或仅保留一个空/非空套接字变量,您就会知道是否使用它,因为它已经打开,或者如果它未打开,则仅发出 ajax 调用。

您的应用程序需要知道何时需要更多实时更新并且应该打开 webSocket,以及何时不再需要实时更新,以便可以关闭套接字。这完全是应用程序逻辑,您尚未描述特定于应用程序的算法,因此如果没有一组详细的要求,我们无法提供太多建议。

你是对的,打开的 webSocket 会比偶尔进行 ajax 调用消耗更多的电池。这是因为 socket.io webSocket 会每隔几分钟发送一次定期的保持事件消息,这样客户端和服务器都可以知道连接何时断开并且必须重新建立。这种定期传输确实会消耗电池。因此,如果将其与每 15 分钟一次的 ajax 调用进行比较,则 ajax 调用将消耗更少的电池。另一方面,如果您需要实时类型更新,因此您需要每 15 秒发出一次 ajax 调用来尝试轮询实时行为,那么 webSocket 会比这更有效,因为服务器可以在需要时发送数据,而无需客户端定期轮询。因此,这实际上取决于使用模式以及您需要更新的实时性。

我可以想象这样的客户端功能:

 // variable that keeps track of when we have an open webSocket connection
// null means no webSocket currently open, non-null means active webSocket

var socket;

// private helper function, don't call directly
function _openSocket(msg, data) {
if (!socket) {
// establish webSocket
socket = io();
socket.on('connect', function() {
if (msg) {
socket.emit(msg, data);
}
});
socket.on('disconnect', function() {
socket = null;
});
}
}

// send some data now
function sendData(msg, data, openContinuous) {
if (socket) {
// webSocket already open
socket.emit(msg, data);
} else if (openContinuous) {
_openSocket(msg, data);
} else {
// send data via ajax call
$.ajax(...);
}
}

// open a continuous connection (e.g. a socket.io connection)
// if not already open
function openContinuous() {
if (!socket) {
_openSocket();
}
}

关于node.js - 仅根据移动应用程序的需求使用 websockets(通过 socket.io)的模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30060381/

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