aardio 文档

aardio 范例: web.rest 支持服务端流式输出

//web.rest 支持服务端流式输出
import win.ui;
/*DSG{{*/
var winform = win.form(text="web.rest - 服务端推送事件";right=753;bottom=434)
winform.add(
edit={cls="edit";left=20;top=12;right=734;bottom=404;edge=1;multiline=1;z=1}
)
/*}}*/

/*
web.rest 客户端支持 SSE( Server-Sent Events) 事件流( MIME 为 "text/event-stream" ),
同时自动兼容 ndjson 流( MIME 为 "application/x-ndjson" )。
*/

import wsock.tcp.simpleHttpServer;  
var url = wsock.tcp.simpleHttpServer.startUrl(function(response,request,session){

    while (true) {   
        response.eventStream(
            event = "ping";
            data = { time = time() };
        ) 

        sleep(1000);
    } 

    /*
    //推送 ndjson 流
    response.contentType = "application/x-ndjson";
    while (true) {    
        response.write( { time = time() },'\n' )
        sleep(1000);
    } 
    */
})

thread.invoke( 
    function(url,winform){ 
        import web.rest.jsonLiteClient;
        var http = web.rest.jsonLiteClient();

        var eventSource = http.api(url) 

        //参数 @2 或 参数@3 指定接收数据回调函数则自动支持 SSE,兼容 ndjson 流。
        eventSource.get( , function(message){   
            //注意这里的 message 已经由 JSON 解析为单个对象
            winform.edit.print("HTTP 服务端推送了事件",type(message))
            winform.edit.print(message);
        } ) 

    },url,winform
)

winform.show();
win.loopMessage();
Markdown 格式