duanmianxue2687 2015-06-22 17:15
浏览 825
已采纳

使用sseclient在Python中读取服务器端事件

I'm new to Server Side Events and started some tests with PHP on the server side and Python on the client side using the sseclient library.

Using a very basic PHP script, based on the w3schools tutorial I can see the data being received in Python:

<?php

header('Content-Type: text/event-stream');
header('Cache-Control: no-cache');

function sendMsg($id, $msg) {
  echo "id: $id" . PHP_EOL;
  echo "data: $msg" . PHP_EOL;
  echo PHP_EOL;
  ob_flush();
  flush();
}


$time = date('r');
// echo "data: The server time is: {$time}

";
// flush();
sendMsg(time(),"The server time is: {$time}

");


?>

and in Python:

#!/usr/bin/env python
from sseclient import SSEClient

messages = SSEClient('http://pathto/myscript.php')
for msg in messages:
    print msg

As a second step I've tried sending data read from an array stored in the $_SESSION variable. This seems to work when I connect to the SSE stream from javascript in the browser, but it doesn't work and I'm not sure why.

Here's my basic PHP script:

<?php

session_start();

header('Content-Type: text/event-stream');
header('Cache-Control: no-cache');

function sendMsg($id, $msg) {
  echo "id: $id" . PHP_EOL;
  echo "data: $msg" . PHP_EOL;
  echo PHP_EOL;
  ob_flush();
  flush();
}

// check for session data
if (isset($_SESSION["data"])){

    #as long there are elements in the data array, stream one at a time, clearing the array (FIFO)
    while(count($_SESSION["data"]) > 0){

        $serverTime = time();
        $data = array_shift($_SESSION["data"]);
        sendMsg($serverTime,$data);

    }
}

?>

and the Python script is the same.

Why isn't the sseclient Python script picking up the events from the above PHP script (while a basic JS one does) ?

  • 写回答

1条回答 默认 最新

  • dsd119120 2015-06-22 21:25
    关注

    The PHP session variable is sent as a cookie; if you view your JavaScript version with Firebug (or equivalent) you should see the cookie being sent to the SSE server script.

    So you'll need to set up a session for the Python script, and have it send that in a cookie too.

    You could confirm this guess by adding some error handling to your PHP script:

    ...
    if (isset($_SESSION["data"])){
       //current code here
    }else{
       sendMsg(time(), "Error: no session");
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 fpga自动售货机数码管(相关搜索:数字时钟)
  • ¥15 用前端向数据库插入数据,通过debug发现数据能走到后端,但是放行之后就会提示错误
  • ¥15 python天天向上类似问题,但没有清零
  • ¥30 3天&7天&&15天&销量如何统计同一行
  • ¥30 帮我写一段可以读取LD2450数据并计算距离的Arduino代码
  • ¥15 C#调用python代码(python带有库)
  • ¥15 活动选择题。最多可以参加几个项目?
  • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型
  • ¥15 vs2019中数据导出问题
  • ¥20 云服务Linux系统TCP-MSS值修改?