gpt4 book ai didi

javascript - Web套接字多个请求

转载 作者:行者123 更新时间:2023-11-29 19:53:55 25 4
gpt4 key购买 nike

我正在尝试了解网络套接字的工作原理。我确实有基本的了解,与 AJAX 不同,网络套接字连接始终打开,这对于实时应用程序很方便。

这是使用 socks 的非常基本的示例:

   var sock = new SockJS('http://mydomain.com/my_prefix');

sock.onopen = function() {
console.log('open');
};

sock.send("request to send (JSON)");

sock.onmessage = function(e) {
console.log('message', e.data);
};

sock.onclose = function() {
console.log('close');
};

要求:我有多个小部件来显示实时数据,所以我希望每个小部件都订阅一个 JSON 请求/服务,保持连接打开并在需要时取消订阅。

问题:在这种情况下,我们如何处理多个请求,就像我们处理典型的 AJAX 设置一样?

如果有人能指导我正确的方向,给我一个例子或教程链接,我将不胜感激。

有人吗?

最佳答案

问题在于,当您发送多个请求时,比如 reqAreqBreqC,服务器必须响应这些请求以相同的顺序 resAresBresC(这是在 keep-alive 开启的假设下,参见 the specification )。浏览器然后知道哪个响应是对哪个请求。

但是对于 WebSockets,您必须手动编写此代码。还有其他选择。例如,其中一个有趣的想法是使用事件 系统。服务器将接受表单中的 JSON 数据

{
"event": "test",
"data": ["foo"]
}

它会以相同的形式向客户端发送数据。在这种情况下,您可以这样做:

var EventManager = // some code here;
sock.onmessage = function(e) {
var msg = JSON.parse(e.data);
EventManager.trigger(msg.event, msg.data);
};

你可以简单地注册到事件

EventManager.on("test", function(data) {
// handle "test" event here
});

当然你必须实现EventManager。为此,您可以使用现有的实现之一,例如 Backbone.js或者你可以自己实现它,就像这里一样:

Implementing events in my own object

关于javascript - Web套接字多个请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16635043/

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