ホームページ  >  記事  >  ウェブフロントエンド  >  HTML5 WebSocket チャット ルーム実装のコード例

HTML5 WebSocket チャット ルーム実装のコード例

黄舟
黄舟オリジナル
2017-03-13 17:22:033081ブラウズ

この記事では主にHTML5-WebSocketの実装例を紹介しますので、興味のある方は参考にしてください。

従来のWebページにチャットルームを実装する方法は、

サービスサーバーに定期的に関連するチャット情報を取得するようリクエストすることでしたが、html5によってもたらされたWebSocket機能により、この方法が変更されました。 WebSocket を使用すると、サーバーに接続した後もデータ対話のための接続を維持できるため、サーバーは対応するデータをクライアントにアクティブに送信できます。 HTML5の処理では、接続が確立された後、WebSocketの受信イベントで受信したデータを処理するだけで、チャットルームを実装することでサーバーがクライアントに能動的に送信できる機能を体験してみましょう。

機能

シンプルなチャットルームには主に次の機能があります:

1) 登録

登録ではいくつかのことを処理する必要があります。つまり、登録が完了した後、すべてのユーザーのリストを取得します。現在のサーバー、サービス 現在登録されているユーザーを他のオンライン ユーザーに送信します。

2)メッセージを送信

サーバーは現在受信しているメッセージをオンラインの他のユーザーに送信します

3)終了

サーバーは切断されたユーザーを他のユーザーに通知します

チャットルームの完成した機能は次のとおりです次のようにプレビューされました:

HTML5 WebSocket チャット ルーム実装のコード例

C#サーバー側コード

サーバー側コードは、登録、他のユーザーの取得、情報の送信など、いくつかの機能に対していくつかのメソッドを定義するだけで済みます。特定のコードは次のとおりです:


/// <summary>

    /// Copyright © henryfan 2012        

    ///Email:   henryfan@msn.com    

    ///HomePage:    http://www.php.cn/       

    ///CreateTime:  2012/12/7 21:45:25

    /// </summary>

    class Handler

    {

        public long Register(string name)

        {

            

            TcpChannel channel = MethodContext.Current.Channel;

            Console.WriteLine("{0} register name:{1}", channel.EndPoint, name);

            channel.Name = name;

            JsonMessage msg = new JsonMessage();

            User user = new User();

            user.Name = name;

            user.ID = channel.ClientID;

            user.IP = channel.EndPoint.ToString();

            channel.Tag = user;

            msg.type = "register";

            msg.data = user;

            foreach (TcpChannel item in channel.Server.GetOnlines())

            {

                if (item != channel)

                    item.Send(msg);

            }

            return channel.ClientID;

        }

        public IList<User> List()

        {

            TcpChannel channel = MethodContext.Current.Channel;

            IList<User> result = new List<User>();

            foreach (TcpChannel item in channel.Server.GetOnlines())

            {

                if (item != channel)

                    result.Add((User)item.Tag);

            }

            return result;

        }

        public void Say(string Content)

        {

            TcpChannel channel = MethodContext.Current.Channel;

            JsonMessage msg = new JsonMessage();

            SayText st = new SayText();

            st.Name = channel.Name;

            st.ID = channel.ClientID;

            st.Date = DateTime.Now;

            st.Content = Content;

            st.IP = channel.EndPoint.ToString();

            msg.type = "say";

            msg.data = st;

            foreach (TcpChannel item in channel.Server.GetOnlines())

            {

                item.Send(msg);

            }
        }
    }

ユーザー終了の場合、チャット ルーム サーバーの機能を完了するには、上記の簡単なコードのみが必要です:


protected override void OnDisposed(object sender, ChannelDisposedEventArgs e)

        {

            base.OnDisposed(sender, e);

            Console.WriteLine("{0} disposed", e.Channel.EndPoint);

            JsonMessage msg = new JsonMessage();

            User user = new User();

            user.Name = e.Channel.Name;

            user.ID = e.Channel.ClientID;

            user.IP = e.Channel.EndPoint.ToString();

            msg.type = "unregister";

            msg.data = (User)e.Channel.Tag;

            foreach (TcpChannel item in this.Server.GetOnlines())

            {

                if (item != e.Channel)

                    item.Send(msg);

            }

        }

そんなチャットサービスの 終了コードが完成しました。

JavaScriptコード

HTML5 コードで最初に行うことは、サーバーに接続することです。関連する JavaScript コードは次のとおりです:


function connect() {

            channel = new TcpChannel();

            channel.Connected = function (evt) {

                callRegister.parameters.name = $(&#39;#nikename&#39;).val();

                channel.Send(callRegister, function (result) {

 

                    if (result.status == null || result.status == undefined) {

                        $(&#39;#dlgConnect&#39;).dialog(&#39;close&#39;);

                        registerid = result.data;

                        list();

                    }

                });

 

            };

            channel.Disposed = function (evt) {

                $(&#39;#dlgConnect&#39;).dialog(&#39;open&#39;);

            };

            channel.Error = function (evt) {

                alert(evt);

            };

            channel.Receive = function (result) {

                if (result.type == "register") {

                    var item = getUser(result.data);

                    $(item).appendTo($(&#39;#lstOnlines&#39;));

                }

                else if (result.type == &#39;unregister&#39;) {

                    $(&#39;#user_&#39; + result.data.ID).remove();

                }

                else if (result.type == &#39;say&#39;) {

                    addSayItem(result.data);

                }

                else {

                }

            }

            channel.Connect($(&#39;#host&#39;).val());

        }

受信コールバック プールの数を使用して、さまざまなメッセージを処理します。他のユーザーからの登録情報を受信した場合、ユーザー情報はリストに追加されます。他のユーザーからの終了情報を受信した場合は、メッセージを直接受信してメッセージ表示ボックスに追加します。 。

jquery の助けを借りて、上記のイベントは非常に簡単になります。

ユーザー登録通話処理:


var callRegister = { url: &#39;Handler.Register&#39;, parameters: { name: &#39;&#39;} };

        function register() {

            $(&#39;#frmRegister&#39;).form(&#39;submit&#39;, {

                onSubmit: function () {

                    var isValid = $(this).form(&#39;validate&#39;);

                    if (isValid) {

                        connect();

                    }

                    return false;

                }

            });

        }

オンラインユーザーリスト取得処理:


var callList = { url: &#39;Handler.List&#39;, parameters: {} };

        function list() {

            channel.Send(callList, function (result) {

                $(&#39;#lstOnlines&#39;).html(&#39;&#39;);

                for (var i = 0; i < result.data.length; i++) {

                    var item = getUser(result.data[i]);

                    $(item).appendTo($(&#39;#lstOnlines&#39;));

                }

            });

        }

メッセージ送信処理:


var callSay = { url: &#39;Handler.Say&#39;, parameters: {Content:""} }

        function Say() {

            callSay.parameters.Content = mEditor.html();

            mEditor.html(&#39;&#39;);

            channel.Send(callSay);

            $(&#39;#content1&#39;)[0].focus();

        }

概要

コードカプセル化後のWebSocketの処理興味があれば、このコードを拡張して、チャット ルームのグループ化、情報の送信、写真の共有などの機能を備えたチャット ルームを作成できます。

以上がHTML5 WebSocket チャット ルーム実装のコード例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。