标签: long-polling

JQuery Ajax 长轮询 - “在 ajax 调用完成并且(至少)三十 (30) 秒过去之前,轮询函数不会再次被调用”

我正在考虑对网站上的“通知”系统进行长时间轮询。我以前从未这样做过,因此我正在网上寻找有关它的信息。我正在看这里:http ://techoctave.com/c7/posts/60-simple-long-polling-example-with-javascript-and-jquery

在关于长轮询的部分中,它说:“超时:为请求设置超时(以毫秒为单位)。超时时间从进行 $.ajax 调用时开始。这里,我们将超时设置为 30 秒。这意味着在 ajax 调用完成并且(至少)三十 (30) 秒过去之前,我们的 poll 函数不会再次被调用。”

说 poll 不会被调用,直到 ajax 调用完成并且至少过去了 30 秒。

当我将其添加到 Javascript 中时,poll 会在 ajax 调用完成时被一遍又一遍地调用。它不会等待 30 秒。

(function poll() {

         $.ajax({ url: "/myapp/messages/messages/checkMessages", success:
         function(data){alert("YO");}, complete: poll, timeout: 30000 });

    })(); 
Run Code Online (Sandbox Code Playgroud)

我是否做错了什么,或者这就是轮询的工作时间?

另外,这样有效率吗?这会随着网站流量而扩展吗?

谢谢您的帮助!

(function poll(){
           setTimeout(function(){
              $.ajax({ url: "/myapp/messages/messages/checkMessages", success: function(data){
                  console.log("Polling!");
              }, complete: poll, timeout: 30000});
          }, 30000);
        })();
Run Code Online (Sandbox Code Playgroud)

ajax jquery long-polling

3
推荐指数
1
解决办法
5445
查看次数

如何使用 Struts 2 在 Java 中实现长轮询?

我想在 java web 应用程序中实现长轮询。基本上,当用户登录时,我希望他能够连接到通知服务。我想在新通知发生时从服务器向他推送新通知,并且我希望他实时查看这些通知。(如此短的轮询或定期检查来自客户端的服务器还不够好)。

我怎样才能做到这一点?本质上,我想要一种从服务器推送字符串消息的方法,并让客户端立即接收它。

我听说一些参考资料说这可以使用来自服务器的“http 块传输”标头来完成。但是如何在客户端上设置呢?

java struts2 comet long-polling

3
推荐指数
1
解决办法
2751
查看次数

注意:显示临时标题

我不能调试这个消息,就像一个星期前一样.

我尝试恢复到旧文件,但这很奇怪,没有解决我的问题.

所以:我有两个长轮询请求.(关闭其中一个没有帮助).

例如,这是其中之一:

public function update_private_messages_ajax_handler(){
    global $wpdb;
    global $bp;
    $chat_table = $wpdb->prefix . 'bp_dollars_chat';

    $current_user = $bp->loggedin_user->id;

    ob_start();
    header("Content-Type: application/json");
    header("Cache-Control: no-cache, must-revalidate");
    header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");

    $startTime = time();
    while((time()-$startTime)<=20) {
        $messages = $wpdb->get_results(
            $wpdb->prepare("(SELECT * 
                FROM $chat_table 
                WHERE to_user = %d
                AND recd = 1
                AND id > %d
                ORDER BY id DESC) ORDER BY id ASC
            ", $current_user, $_POST['last_id'])
        );
        if($messages) {
            foreach($messages as $v){
                //$v->timestring = date_i18n($this->date_format.' - '.$this->time_format, $v->unix_timestamp+$this->gmt_offset);
                $v->name …
Run Code Online (Sandbox Code Playgroud)

php ajax comet long-polling google-chrome-devtools

3
推荐指数
2
解决办法
7万
查看次数

SSE或长时间轮询共享主机上的实时通知?

在共享主机服务器发送事件(SSE)或长轮询上实现实时通知的最佳方法是什么?

我看了一个视频说SSE不适合共享主机,Apache服务器并不适合PHP和MySql.

链接视频

我只是想知道哪种技术更适合长轮询或SSE在共享服务器上进行实时通知,我在godaddy.com上有我的服务器

请提供解释推荐技术的良好链接.

php mysql shared-hosting long-polling server-sent-events

3
推荐指数
1
解决办法
1070
查看次数

使用Angular 4和Http可观察量进行无限轮询

我正在尝试在我的Http服务中构建一个无限轮询,因为我正在建立一个dashborad之王来调查来自服务器的数据,这里是我的代码几乎正在工作(在我的控制台中,我看到Json正在进行,但它没有'反思我的看法...我想注入我的用户:可观察

const usersURL = 'http://my.super.servor.php'

@Injectable()
export class UserService {

 users: Observable<User[]>

   constructor (public http:Http) {
     this.users = http.get(usersURL)
              genre mobile ou autre
              .map(res => [res.json()]);

        let i = this.users.subscribe(
          usersURL => console.log(usersURL),
         () => {}, // Here we catch up errors
         () => console.log("completed!") // Here we catch up if its completed
        )

    // Here's where I'm trying to do the polling every 5 secondes
    let tick$ = Observable.interval(5000);

    let response$ = 
      tick$
          .flatMap(() => http.get(usersURL))
          .map(res => [res.json()]); …
Run Code Online (Sandbox Code Playgroud)

javascript long-polling angular-http rxjs5 angular

3
推荐指数
1
解决办法
2022
查看次数

如何让守卫订阅 Angular 2 中服务的长轮询请求

我正在尝试制作旧时尚应用程序的 Angular 2 版本。有一项服务会向服务器发送重复请求以检查用户是否正在登录。登录守卫将检查轮询以查看登录会话结果(从请求中获取)是否有效,以便向路由返回正确的信号。

这是我的服务功能:

getUser(): Observable<User> { return this.http.get<User>(this.userUrl); }

这是我的守卫的 canActive 函数:

canActivate( next: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean { // const isLoggedIn = this.authService.isLoggedIn(); return this.authService.getUser().flatMap((data) => { console.log(data); if (data.id === 1 && data.name === 'Beany' ) { console.log(1111) return Observable.of(true); } else { console.log(2222) this.router.navigate(['pages/login']); return Observable.of(false); } });

该路线有效,但只有 1 次。不确定是否可以重复此操作(当请求完成时,服务将重新向服务发送检查,当然我应该为此设置一点超时)?

service long-polling angular angular-router angular-guards

3
推荐指数
1
解决办法
336
查看次数

HTTP-长轮询保持活动和握手

我正在进行一项测试,检查与 Websockets 相比,HTTP 长轮询对 iPhone 电池性能的影响程度。基本上我拥有的是一个带有 Express 服务器的 Node.js,它每隔 0.5 或 10 秒向 iPhone 发送一个随机字符串。我检查了 Chrome 中的消息,可以看到存在 keep-alive 标头。我知道 keep-alive 是自 HTTP/1.1 以来的默认功能。据我了解,TCP 连接将保持打开状态并可用于管道传输,当我每 0.5 秒从服务器发送 ping 时,情况肯定如此。但是当我每10秒发送一次时,连接会在这段时间关闭吗?

  1. 我如何知道连接打开了多长时间?这似乎是进行测试时要记住的关键部分。

  2. 当 TCP 连接打开时,HTTP 握手是否仍会进行?

http keep-alive long-polling

3
推荐指数
1
解决办法
3815
查看次数

什么类型的 Azure 应用服务来托管网络核心控制台应用程序?

我有一个长时间运行的控制台应用程序,使用 while(true)... 结构 它是通过使用 Net Core 实现的 我应该创建什么类型的 Azure 应用服务来托管该应用程序?

azure long-polling .net-core azure-web-app-service

3
推荐指数
2
解决办法
8634
查看次数

当我尝试从两个不同的终端选项卡轮询相同的 Amazon SQS 时,我在两个选项卡中都没有收到相同的消息

我创建了一个 Amazon SNS 主题。我有一个订阅该主题的 Amazon SQS 队列。

我创建了一个默认的 SQS 队列(不是 FIFO 队列)。

我正在使用sqs-consumerAPI 来长轮询队列SQS

const app = Consumer.create({
    queueUrl: 'https://sqs.us-east-2.amazonaws.com/xxxxxxxxxxxx/xxxxxxxxxxx',
    handleMessage: async (message) => {

        console.log(message);
    },
    sqs: sqs//new AWS.SQS({apiVersion: '2012-11-05'})
});

app.on('error', (err) => {
    console.error(err.message);
});

app.on('processing_error', (err) => {
    console.error(err.message);
});

app.on('timeout_error', (err) => {
    console.error(err.message);
});

app.start();
Run Code Online (Sandbox Code Playgroud)

当我js通过执行以下操作从单个终端运行这段文件时node sqs_client.js,一切都工作得很好,消息也按正确的顺序发送。

但是,如果打开另一个终端窗口并运行node sqs_client.js,则传入消息的顺序变得非常随机。较新的消息可能以任何顺序进入第一终端窗口或第二终端窗口。

为什么会这样呢?有什么方法可以防止这种情况,以便我可以同时在两个终端窗口中收到相同的消息。

message-queue amazon-sqs amazon-web-services long-polling amazon-sns

3
推荐指数
1
解决办法
1248
查看次数

PHP jQuery长轮询聊天应用程序

我用短轮询(AJAX Refresh)创建了一个简单的PHP jQuery Chat应用程序.比如,每2到3秒就要求新消息.但是,我读到Long Polling是一种更好的聊天应用程序方法.所以,我经历了一些Long Polling脚本.我是这样做的:

使用Javascript:

$("#submit").click(function(){
    $.ajax({
        url: 'chat-handler.php',
        dataType: 'json',
        data: {action : 'read', message : 'message'}
    });
});

var getNewMessage = function() {
    $.ajax({
        url: 'chat-handler.php',
        dataType: 'json',
        data: {action : 'read', message : 'message'},
        function(data){
            alert(data);
        }
    });

    getNewMessage();
}

$(document).ready(getNewMessage);
Run Code Online (Sandbox Code Playgroud)

PHP

<?php
    $time = time();
    while ((time() - $time) < 25) {
        $data = $db->getNewMessage ();

        if (!empty ($data)) {
            echo json_encode ($data);
            break;
        }

        usleep(1000000); // 1 Second
    }
?>
Run Code Online (Sandbox Code Playgroud)

问题是,一旦getNewMessage()启动,它将执行,除非它得到一些响应(来自chat-handler.php).它以递归方式执行.但是如果有人想在其间发送消息,那么实际上该函数 …

javascript php ajax jquery long-polling

2
推荐指数
1
解决办法
3587
查看次数