今回は、H5 サーバー プッシュ イベント と、サーバー プッシュ イベント の注意事項 について詳しく説明します。実際のケースを見てみましょう。
サーバー送信イベントは、サーバーがイベントとデータをクライアントに送信する、WebSocket プロトコルに基づく一方向通信です。現在、Internet Explorer を除くすべての主要なブラウザがサーバー送信イベントをサポートしています。 2333...
WebSocket プロトコルは、HTTP プロトコルに次ぐサーバーとクライアントの通信プロトコルです。クライアントがサーバーに応答を要求する HTTP の単純な一方向通信モードとは異なり、サーバーとサーバー間の双方向通信をサポートします。クライアント。
サーバー送信イベントの使用
サーバー送信イベント (以下、SSE) をサーバー => クライアント通信方式として使用する場合、クライアントは対応するサービス アドレスと応答メソッド、およびサーバーを必要とします。対応するデータ送信メソッドが必要です。早速、コードに進みましょう。
クライアントサイド JS コード
次の JS コードを H5 ページに追加する必要があります:
<script> if (typeof (EventSource) !== "undefined") { //推送服务接口地址 var eventSource = new EventSource("http://localhost:2242/webservice/ServerSent/SentNews"); //当通往服务器的连接被打开 eventSource.onopen = function () { console.log("连接打开..."); } //当错误发生 eventSource.onerror= function (e) { console.log(e); }; //当接收到消息,此事件为默认事件 eventSource.onmessage = function (event) { console.log("onmessage..."); eventSource.close()//关闭SSE链接 }; //服务器推送sentMessage事件 eventSource.addEventListener('sentMessage', function (event) { var data = eval('('+event.data+')');//服务器端推送的数据,eval装换Json对象 var origin = event.origin;//服务器 URL 的域名部分,即协议、域名和端口,表示消息的来源。 var lastEventId = event.lastEventId;////数据的编号,由服务器端发送。如果没有编号,这个属性为空。 //此处根据需求编写业务逻辑 console.log(data); }, false); } else { //浏览器不支持server-sent events 所有主流浏览器均支持服务器发送事件,除了 Internet Explorer。 document.getElementById("result").innerHTML = "Sorry, your browser does not support server-sent events..."; } </script>
サーバー
サーバーはどのデータ形式を返す必要がありますか?クライアントにはどのような対応をすればよいのでしょうか? .Net の例から始めましょう
/// <summary> /// 推送消息 /// </summary> /// <returns></returns> [HttpGet] public HttpResponseMessage SentNews() { HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.OK); try { //response.Headers.Add("Access-Control-Allow-Origin", "*");//如需要跨域可配置 string data_str = “推送至客户端的数据”;//当然可以是json字符串格式 string even = "", data = ""; if (!string.IsNullOrWhiteSpace(data_str)) { even = "event:sentMessage\n"; data = "data:" + data_str + "\n\n"; } string retry = "retry:" + 1000 + "\n";//连接断开后重连时间(毫秒),其实可以理解为轮询时间 2333... byte[] array = Encoding.UTF8.GetBytes(even + data + retry); Stream stream_result = new MemoryStream(array); response.Content = new StreamContent(stream_result); response.Content.Headers.ContentType = new MediaTypeHeaderValue("text/event-stream");//此处一定要配置 response.Headers.CacheControl = new CacheControlHeaderValue(); response.Headers.CacheControl.NoCache = false; } catch (Exception ex) { LogHelper.WriteWebLog(ex); } return response; }
上記のコードを読んだ後、応答メソッドは依然として HTTPResponse ですが、常にいくつかの小さな要件があります:
Response header "Content-Type" To応答のデータ形式を「text/event-stream」に設定します
。上記のコード内の「data:」、「event:」、および「retry:」タグにも注目してください:
1.event: は次のことを表します。この行はイベントのタイプを宣言するために使用されます。ブラウザがデータを受信すると、対応するタイプのイベントが生成されます。
2.data: 行にデータが含まれていることを示します。データで始まる行は複数回出現する場合があります。これらすべての行はそのイベントのデータです。
3.retry: この行は、接続が切断された後、再接続するまでのブラウザの待ち時間を宣言するために使用されることを示します。
4.id: この行でイベントを宣言するために使用される識別子 (つまり、データの番号) を示しますが、一般的には使用されません。
この記事の事例を読んだ後は、この方法を習得したと思います。さらに興味深い情報については、php 中国語 Web サイトの他の関連記事に注目してください。
推奨読書:
H5のビデオタグがmp4ファイルを再生できない問題を解決する方法
H5マルチスレッド(Worker SharedWorker)の詳細な説明
以上がH5サーバープッシュイベントの詳細説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。