是否有可能像使用Ajax一样使用SSE将POST数据发送到PHP?通过服务器发送事件向PHP发布POST?
我一直在使用AJAX很长一段时间,但在长轮询技术中效果不好。我也一直在思考WebSockets,但似乎有点多余。
是否有可能像使用Ajax一样使用SSE将POST数据发送到PHP?通过服务器发送事件向PHP发布POST?
我一直在使用AJAX很长一段时间,但在长轮询技术中效果不好。我也一直在思考WebSockets,但似乎有点多余。
不,SSE不能发送任何数据到服务器。
您仍然可以使用SSE实时读取数据并使用AJAX上传任何数据(您可能需要共享数据库在AJAX接收过程和SSE发送过程之间传递信息)。
您可以通过GET发送数据。
例如
name=john&name=lea
这是一个简单的脚本,它向服务器发送迭代次数,服务器使用SSE返回进度。
该项目由两个文件(index.php和ssedemo.php)组成。
index.php包含一个文本框和一个按钮。假设文本框中包含循环的迭代次数在ssedemo.php
<h2>Server Sent Event Test</h2>
<form>
<label>Process Duration</label>
<input type="text" id="progVal">
<input type="button" value="Get Messages" onclick="updateProgress()"/>
</form>
<div id="container">
</div>
的UpdateProgress
function updateProgress() {
var input = $('#progVal').val();
var evtSource = new EventSource("ssedemo.php?duration=" + encodeURIComponent(input));
evtSource.addEventListener("progress", function (e) {
var obj = JSON.parse(e.data);
$('#container').html(obj.progress);
if( parseInt(obj.progress) == 100){
evtSource.close();
}
}, false);
}
这个功能得到使用jQuery文本框的内容,然后创建一个eventSource。 EventSource()构造函数带有一个或两个参数。第一个指定要连接的URL。第二个以EventSourceInit字典的形式指定设置(如果有的话)。
您可以通过将其添加到URL来传递您想要的内容,就像使用GET一样。
"ssedemo.php?duration=" + encodeURIComponent(input)
在服务器端,你必须设置头型和禁用缓存根据W3C recommendation
header("Content-Type: text/event-stream");
header("Cache-Control: no-cache");
然后你使用$ _GET像往常一样的数据。
$TotalNo = $_GET['duration'];
for ($i = 1; $i <= $TotalNo; $i++) {
updateProgress($i, $TotalNo);
sleep(1);
}
function updateProgress($currentVal, $totalNo) {
$completionPrecentage = $currentVal/$totalNo * 100;
echo "event: progress\n";
echo 'data: {"progress": "' . $completionPrecentage . '"}';
echo "\n\n";
ob_flush();
flush();
}
,如果你想送数组可以参考this
欢迎来到Stack Overflow!虽然这可能会在理论上回答这个问题,[这将是更可取的](// meta.stackoverflow.com/q/8259)在这里包括答案的基本部分,并提供参考链接。 –
SSE是专为单向推动,而不是双向通信 - 此Web套接字可能是更合适的 – tomfumb
怎么样的node.js, http://nodejs.org – FirmView
@tomfumb我只POST 2字节的数据 – user1431627