duanhe1903 2013-07-25 04:54
浏览 66

服务器发送事件,服务器端代码

Implementing server-sent events is on the face of it quite a simple task. Borrowing the examples in the Mozilla documentation the client side code would be along the lines of

var evtSource = new EventSource("ssedemo.php");
evtSource.onmessage = function(e){//do stuff with e.data here}

What I have difficulty understanding is what happens server side. The things that puzzle me

  • So you want to keep sending out events from ssdemo.php means that you need to run it in a loop and let it sleep when it isn't sending
  • But by default Apache is setup to kill scripts that take "too long" to execute so this cannot be an infinite loop unless you setup that script run that way
  • If I have 10 users who come in requesting the same SSE service (ssdemo.php) would it then mean that I would have 10 instances of that looped script?

I suspect that my understanding of how the server side code works, should be coded is either flawed or naive or both. I would much appreciate any pointers to the right way to do this.

  • 写回答

2条回答 默认 最新

  • duanlidi1051 2013-09-01 18:39
    关注

    Your understanding is correct. PHP needs to keep running, and in PHP you will need a loop, and you'll quickly run out of free Apache threads.

    If you need to handle lots of connections you need to use event-based server like Node.js or Tornado that can handle lots of open connections.

    If you'd rather use PHP, then a partial solution is to close connection after few seconds. The browser will reconnect, so you'll get a hybrid of polling and SSE.

    In PHP you can check sys_getloadavg() to decide whether you can keep connection open or you're running short on free processes.

    评论

报告相同问题?

悬赏问题

  • ¥50 永磁型步进电机PID算法
  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥200 uniapp长期运行卡死问题解决
  • ¥15 latex怎么处理论文引理引用参考文献
  • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?
  • ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?