在浏览器中调试 HTML5 服务器发送的事件

Posted

技术标签:

【中文标题】在浏览器中调试 HTML5 服务器发送的事件【英文标题】:Debugging HTML5 Server-Sent Events in-browser 【发布时间】:2014-11-15 08:47:27 【问题描述】:

有没有办法在 Chrome(或者可能是 Firefox)中查看/调试Server-Sent Events?我希望它们会出现在 Chrome 开发者工具的网络标签中。我知道的最接近的方法是下拉到 Wireshark,但相比之下这相当麻烦。

例如,转到http://www.emojitracker.com/。您将看到页面使用来自服务器的数据实时更新,但网络选项卡中不会出现任何活动。 (它在 /application.js 的第 97 行订阅服务器事件。)

【问题讨论】:

【参考方案1】:

访问chrome://cache 并单击服务器发送事件的 URL。然后您将被重定向到类似chrome://view-http-cache/http://emojitrack-gostreamer.herokuapp.com/subscribe/eps 的页面,其中包含以下内容:

http://emojitrack-gostreamer.herokuapp.com/subscribe/eps
HTTP/1.1 200 OK
Access-Control-Allow-Origin: *
Cache-Control: no-cache
Content-Type: text/event-stream; charset=utf-8
Server: emojitrack-gostreamer
Date: Sun, 21 Sep 2014 11:17:48 GMT
Via: 1.1 vegur
00000000: fc 00 00 00 03 00 04 00 fd 79 7d c4 27 62 2e 00  .........y.'b..
00000010: 0c 87 7f c4 27 62 2e 00 c8 00 00 00 48 54 54 50  ....'b......HTTP
00000020: 2f 31 2e 31 20 32 30 30 20 4f 4b 00 41 63 63 65  /1.1 200 OK.Acce
00000030: 73 73 2d 43 6f 6e 74 72 6f 6c 2d 41 6c 6c 6f 77  ss-Control-Allow
00000040: 2d 4f 72 69 67 69 6e 3a 20 2a 00 43 61 63 68 65  -Origin: *.Cache
00000050: 2d 43 6f 6e 74 72 6f 6c 3a 20 6e 6f 2d 63 61 63  -Control: no-cac
00000060: 68 65 00 43 6f 6e 74 65 6e 74 2d 54 79 70 65 3a  he.Content-Type:
00000070: 20 74 65 78 74 2f 65 76 65 6e 74 2d 73 74 72 65   text/event-stre
00000080: 61 6d 3b 20 63 68 61 72 73 65 74 3d 75 74 66 2d  am; charset=utf-
00000090: 38 00 53 65 72 76 65 72 3a 20 65 6d 6f 6a 69 74  8.Server: emojit
000000a0: 72 61 63 6b 2d 67 6f 73 74 72 65 61 6d 65 72 00  rack-gostreamer.
000000b0: 44 61 74 65 3a 20 53 75 6e 2c 20 32 31 20 53 65  Date: Sun, 21 Se
000000c0: 70 20 32 30 31 34 20 31 31 3a 31 37 3a 34 38 20  p 2014 11:17:48 
000000d0: 47 4d 54 00 56 69 61 3a 20 31 2e 31 20 76 65 67  GMT.Via: 1.1 veg
000000e0: 75 72 00 00 0d 00 00 00 35 30 2e 31 37 2e 32 34  ur......50.17.24
000000f0: 35 2e 32 31 33 00 00 00 50 00 00 00 01 00 00 00  5.213...P.......

00000000: 64 61 74 61 3a 7b 22 31 46 34 34 45 22 3a 31 2c  data:"1F44E":1,
00000010: 22 31 46 34 36 44 22 3a 31 7d 0a 0a 64 61 74 61  "1F46D":1..data
00000020: 3a 7b 22 31 46 34 41 39 22 3a 31 2c 22 31 46 36  :"1F4A9":1,"1F6
00000030: 31 32 22 3a 31 7d 0a 0a 64 61 74 61 3a 7b 22 31  12":1..data:"1
00000040: 46 34 39 36 22 3a 31 7d 0a 0a 64 61 74 61 3a 7b  F496":1..data:
00000050: 22 31 46 36 31 44 22 3a 31 7d 0a 0a 64 61 74 61  "1F61D":1..data
00000060: 3a 7b 22 31 46 33 35 35 22 3a 31 2c 22 31 46 36  :"1F355":1,"1F6
00000070: 31 44 22 3a 31 2c 22 31 46 36 33 34 22 3a 31 7d  1D":1,"1F634":1
00000080: 0a 0a 64 61 74 61 3a 7b 22 31 46 33 33 39 22 3a  ..data:"1F339":

按 F5 刷新视图。 (如果请求选项卡已关闭,则该项目将从缓存中逐出,您将看到“no matching cache entry for: http://emojitrack-gostreamer.herokuapp.com/subscribe/eps”)。

【讨论】:

【参考方案2】:

事件现在出现在网络选项卡中。单击 SSE 流的 URL,您将有一个“EventStream”选项卡:

【讨论】:

右键单击并“复制响应”以在剪贴板中获取响应(如果它是大 json,则 EventStream 选项卡不会显示所有内容) 有没有办法在 FireFox 上看到同样的东西?

以上是关于在浏览器中调试 HTML5 服务器发送的事件的主要内容,如果未能解决你的问题,请参考以下文章

调试事件的发送流程

服务器发送事件与轮询

谷歌分析事件跟踪:如何避免发送数据进行本地测试?

html html5服务器发送事件,推送

HTML5 SSE

HTML5 服务器发送事件原型 - 模棱两可的错误和重复轮询?