亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > HTML5 > 正文

HTML5-WebSocket實現聊天室示例

2024-09-05 07:18:55
字體:
來源:轉載
供稿:網友

在傳統的網頁實現聊天室的方法是通過每隔一段時間請求服務器獲取相關聊天信息來實現,然而html5帶來的websocket功能改變這了這種方式.由于websocket在連接服務器后允許保持連接來進行數據交互,因此服務器可以主動地向客戶端發送相應的數據.對于html5的處理只需要在連接創建完成后在websocket的receive事件中處理接收的數據即可.下面通過實現一個聊天室來體驗一下服務器可以主動地向客戶端發的功能.

功能

一個簡單的聊天室主要有以下幾個功能:

1)注冊

注冊要處理幾個事情,分別是注冊完成后獲取當前服務器所有用戶列表,服務把當前注冊成功的用戶發送給其他在線的用戶.

2)發信息

服務器把當前接收的消息發送給在線的其他用戶

3)退出

服務器把斷開的用戶通知其他用戶

聊天室完成的功能預覽如下:

C#服務端代碼

服務端的代碼只需要針對幾功能定義幾個方法即可,分別是注冊,獲取其他用戶和發送信息.具體代碼如下:

/// <summary>    /// Copyright © henryfan 2012            ///Email:   henryfan@msn.com        ///HomePage:    http://www.ikende.com           ///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 = $('#nikename').val();                channel.Send(callRegister, function (result) {                     if (result.status == null || result.status == undefined) {                        $('#dlgConnect').dialog('close');                        registerid = result.data;                        list();                    }                });             };            channel.Disposed = function (evt) {                $('#dlgConnect').dialog('open');            };            channel.Error = function (evt) {                alert(evt);            };            channel.Receive = function (result) {                if (result.type == "register") {                    var item = getUser(result.data);                    $(item).appendTo($('#lstOnlines'));                }                else if (result.type == 'unregister') {                    $('#user_' + result.data.ID).remove();                }                else if (result.type == 'say') {                    addSayItem(result.data);                }                else {                }            }            channel.Connect($('#host').val());        } 

通過Receive回調池數來處理不同消息的情況,如果是接收到其他用戶的注冊信息,則把用戶信息添加到列表中;如果收到的其他用戶的退出信息則在用戶列表種移走;直接收到消息添加到消息顯示框中即可.有jquery的幫助以上事件都變得非常簡單.

用戶注冊調用過程:

var callRegister = { url: 'Handler.Register', parameters: { name: ''} };        function register() {            $('#frmRegister').form('submit', {                onSubmit: function () {                    var isValid = $(this).form('validate');                    if (isValid) {                        connect();                    }                    return false;                }            });        } 

獲取在線用戶列表過程:

var callList = { url: 'Handler.List', parameters: {} };        function list() {            channel.Send(callList, function (result) {                $('#lstOnlines').html('');                for (var i = 0; i < result.data.length; i++) {                    var item = getUser(result.data[i]);                    $(item).appendTo($('#lstOnlines'));                }            });        } 

發送消息過程:

var callSay = { url: 'Handler.Say', parameters: {Content:""} }        function Say() {            callSay.parameters.Content = mEditor.html();            mEditor.html('');            channel.Send(callSay);            $('#content1')[0].focus();        } 

代碼下載:demo

總結

經過代碼封裝后websocket的處理變得非常簡單,如果你有興趣完全可以在此代碼上擴展出一個更多功能的聊到室,如聊天室分組,發送信息圖片共享等等.

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲欧洲第一视频| 菠萝蜜影院一区二区免费| 97婷婷大伊香蕉精品视频| 亚洲理论在线a中文字幕| 91中文精品字幕在线视频| 亚洲欧美另类人妖| 亚洲国产毛片完整版| 91在线直播亚洲| 国产精品久久久久久久久久小说| 69久久夜色精品国产7777| 久久九九有精品国产23| 日韩精品视频中文在线观看| 中文字幕亚洲图片| 久久精品国产电影| 黑人与娇小精品av专区| 欧美高跟鞋交xxxxxhd| 亚洲精品视频免费| 欧美国产激情18| 亚洲日本成人女熟在线观看| 国产精品欧美激情在线播放| 91久久精品久久国产性色也91| 欧美激情免费在线| 尤物九九久久国产精品的分类| 欧美极品xxxx| 国产精品午夜国产小视频| 久久精品国产久精国产一老狼| 欧美在线视频一二三| 日韩中文理论片| 欧美不卡视频一区发布| 乱亲女秽乱长久久久| 亚洲精品av在线| 亚洲免费小视频| 亚洲另类xxxx| 国产精品亚洲精品| 精品无码久久久久久国产| 日韩一区二区三区在线播放| 亚洲综合精品一区二区| 欧美成人午夜免费视在线看片| 欧美一级淫片aaaaaaa视频| 亚洲精品久久久久久久久久久久久| 91久久精品美女高潮| 亚洲天堂2020| 国产精品成人aaaaa网站| 亚洲在线第一页| 欧美激情精品在线| 久久99久久99精品免观看粉嫩| 欧美日韩美女视频| 上原亚衣av一区二区三区| 亚洲国产私拍精品国模在线观看| 国产日韩综合一区二区性色av| 日韩精品在线观| 97视频在线观看亚洲| 日韩精品免费在线观看| 欧美成人免费观看| 欧美性少妇18aaaa视频| 精品视频在线观看日韩| 亚洲日本中文字幕免费在线不卡| 国产成人精品久久亚洲高清不卡| 欧美乱人伦中文字幕在线| 国产成人精品电影久久久| 久久久最新网址| 综合国产在线观看| 伊人亚洲福利一区二区三区| 国产亚洲欧美日韩一区二区| 日韩久久午夜影院| 精品视频久久久久久久| 欧美国产日韩精品| 亚洲日本成人网| 热99精品里视频精品| 国产免费一区二区三区在线观看| 欧美一级在线亚洲天堂| 欧美极品欧美精品欧美视频| 欧美精品激情视频| 欧美激情精品久久久久久| 欧洲亚洲妇女av| 97精品久久久中文字幕免费| 欧美性极品xxxx娇小| 日本成人激情视频| 亚洲色图五月天| 欧美成人激情在线| 精品网站999www| 亚洲国产精彩中文乱码av在线播放| 日韩中文字幕网| 色视频www在线播放国产成人| 国产精品久久久久久婷婷天堂| 亚洲国产欧美在线成人app| 亚洲人成毛片在线播放| 欧美视频精品一区| 久久久久久亚洲精品| 国产成人精品久久| 国产精品国产三级国产aⅴ浪潮| 欧美性xxxxxxx| xvideos成人免费中文版| 久久精品久久久久久| 色综合天天综合网国产成人网| 欧美黑人性生活视频| 9.1国产丝袜在线观看| 亚洲国产精品资源| 欧美黑人一区二区三区| 欧美性猛交xxxxx水多| 伊人久久精品视频| 亚洲午夜性刺激影院| 97人洗澡人人免费公开视频碰碰碰| 7777kkkk成人观看| 成人激情在线播放| 国产精品久久久久久久久久久久| 久久九九国产精品怡红院| 97国产在线视频| 丁香五六月婷婷久久激情| 国产精品免费电影| 正在播放亚洲1区| 日韩精品在线免费观看视频| 亚洲天堂av在线免费观看| 久久久久久久久久av| 俺去亚洲欧洲欧美日韩| 久久九九免费视频| 国产成人欧美在线观看| 国产精品普通话| 久久国产精品久久久久久| 日韩在线观看免费高清完整版| 中文字幕成人精品久久不卡| 啪一啪鲁一鲁2019在线视频| 伊人久久大香线蕉av一区二区| 精品久久久国产精品999| 亚洲人成电影网站| 欧美精品videofree1080p| 亚洲综合在线播放| 国产热re99久久6国产精品| 日韩欧美成人网| 欧美极度另类性三渗透| 国产视频精品va久久久久久| 性欧美xxxx视频在线观看| 亚洲va欧美va国产综合剧情| 北条麻妃一区二区三区中文字幕| 中文字幕在线日韩| 国产精品7m视频| 成人黄色片在线| 亚洲国产成人精品电影| 欧美午夜片欧美片在线观看| 欧美精品在线观看91| 中文字幕欧美亚洲| 亚洲区免费影片| 日韩欧美在线中文字幕| 中文字幕精品视频| 欧美日韩亚洲一区二区三区| 国产精品日韩欧美综合| 91免费看片在线| 国产精品女视频| 欧美另类精品xxxx孕妇| 亚洲九九九在线观看| 91午夜理伦私人影院| 国产亚洲视频在线观看| 欧美大成色www永久网站婷| 国产日本欧美一区| 国产欧美日韩中文字幕在线| 在线成人中文字幕| 中文亚洲视频在线| 欧美日韩在线影院| 亚洲精品中文字幕有码专区| 狠狠做深爱婷婷久久综合一区| 不卡av日日日| 2019av中文字幕| 亚洲人成网站在线播| 欧美又大又粗又长|