所有分类
  • 所有分类
  • 后端开发
教你用WebSocket打造实时热闹聊天室

教你用WebSocket打造实时热闹聊天室

聊天室完成的功能预览如下:服务端的代码只需要针对几功能定义几个方法即可,分别是注册,获取其他用户和发送信息.具体代码如下:只需要以上简单的代码就完成了聊天室服务端的功能,对于用户退出可以通过连接释放事件来做处理具体代码:这样聊天定的服务端代

这篇文章给大家讲讲怎么用HTML5里的WebSocket搞出个简单聊天室。以前的网页聊天都是定期找服务器拿消息,但WebSocket不一样,它能让客户端和服务端直接连上,两边都能发东西,提高了聊天气氛。咱就用个实例来说说WebSocket咋用,希望你能有所收获。

注册用户和广播功能

在聊天室里,先搞定用户注册和消息传递这两件大事儿!当有人注册了,得马上看看大家是不是都在,然后把新朋友的信息告诉大家。这样做,每个观众就都知道现在有多少小伙伴在,还能热烈欢迎新人的到来!用WebSocket这个神器,服务器就能主动发消息给客户端了,聊天就是这么实时方便!

消息发送与接收

讲到发消息收消息的事儿,那就得说说这个WebSocket了。你知道吗?每当有人发消息,这服务器可就忙坏了,要把它发送出去让所有在线的人都看得见,就像搞个大群聊天一样热闹!除此之外,这服务器还得处理收到的消息,保证它们能准确地传送给想要收看的人。有了这么快的速度和实时通讯功能,WebSocket在聊天室里可是独占鳌头!

教你用WebSocket打造实时热闹聊天室

处理用户断开连接

聊天室不只是注册信息和传讯要管呢,还要应对断线问题。比如一个朋友离开或者网络不好掉线了,这时候服务器要立马提醒大家他走了,并且把他在白名单里删掉。这么做才能让我们知道谁在,聊天室才能正常运作起来呀。

/// 
    /// Copyright © henryfan 2012        
    ///Email:   henryfan@msn.com    
    ///HomePage:    http://www.php.cn/       
    ///CreateTime:  2012/12/7 21:45:25
    /// 
    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 List()
        {
            TcpChannel channel = MethodContext.Current.Channel;
            IList result = new List();
            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);
            }
        }
    }

C#服务端代码示例

服务端代码就得弄几个简易的方法搞定注册啊、查别人信息啊或者发信息啥的功能。用C#写能顺手地跟前端WebSocket聊天儿,也就搞好了各种聊天儿室要用到的东西了。

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前端代码示例

前端代码搞的就是跟服务器连个WebSocket聊天,然后处理下咱们收到的那些消息。用JavaScript写点小逻辑,就能搞定各种类型的消息显示和操作了。再加上像 jQuery这种小助手,处理事件啥的就简单多了,交互起来特流畅那种~

扩展更多功能

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());
        }

封装过之后,WebSocket用起来特方便了。如果你想做那种聊天室软件,那就更好办,可以添加更多好玩儿的功能,比如说分组聊天、分享图片之类的。这个WebSocket可不得了,它是个强有力的即时通信工具,以后会有越来越多的地方用到它!

这篇文章告诉大家如何用HTML5-WebSocket做一个聊天室,让我们更清楚地明白WebSocket这技术到底能干。要是你跟我一样,对即时通讯和前后端交流有兴趣,那就动手试试搭建个简陋的聊天室,相信你会爱上WebSocket给我们生活带来的便利和工作效率提升!

结语及展望

总之,HTML5-WebSocket给咱带来了全新的前后端交流方法,对于制作互动效果棒棒哒的网页软件至关重要。看了这篇文章在聊室里的比喻,你应该也大概了解了WebSocket在网页设计中是怎么用的,以及它大致的原理是啥。以后,随着网页科技越来越成熟,咱们还会有更多像WebSocket这样有意思的新玩意儿出现。

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

希望我这篇文章能给你些灵感,帮到你!想想要用 HTML5-WebSocket 打造什么样的好玩功能?快跟大家说说你的点子!

原文链接:https://www.icz.com/technicalinformation/web/2024/04/13606.html,转载请注明出处~~~
0

评论0

请先
注意:请收藏好网址www.icz.com,防止失联!站内免费资源持续上传中…!赞助我们
显示验证码
没有账号?注册  忘记密码?