我相信,有前面两篇的介绍,稍微熟悉socket程序设计的开发人员,应该完全能自行设计出一个基于webSocket的在线交互系统了,趁着我现在还有几分热情,干脆写个完整的聊天室,就当是我为业内socket开发新手所作的一点小贡献吧。欢迎广大朋友对我的思路和代码拍砖,能够互相促进也就是我的愿望了。
我们先来总体规划一下我们的聊天室会有些什么功能吧(先列着,以后可能扩展):
① 登录聊天室
②向所有在线聊友广播消息
③ 针对某在线聊友发送消息,也即私聊
④ 退出聊天室
这四点,也即一个最简单的聊天室功能了,为此,我设计了一个简单的应用协议,先说明一下,为了能够更好的让大家理解,我就没用像前文的协议那样,节约字符了,相信聪明的你一定在真正设计时,不会像我现在这样的。
我现在所说的协议,是针对我们上节中DataFrame中的Text的内容,为满足客户端和服务器在聊天时的有效沟通而制定的,所有命令都是以3个字符的命令码开头,每条命令都有四部分组成:命令字,消息来源,消息去向,消息体,具体命令字定义如下:
① 登录聊天室
具体流程为:客户端和服务器建立连接后,客户端马上发送如下格式:
LIN为登录的命令码,逍遥谷主 为用户的昵称,也即在聊天室中,你显示的名字。
登录成功后,服务器会为你产生一个整形ID,同时向所有在线的客户端发出通知,有人登录了,同时,也会将当前所有在线的客户信息,返回给你,这样,你一登录,聊天室内所有人就知道你来了,同时,你也能知道,现在聊天室中有哪些人在线了。
② 发送消息
其中,第一个0,为发送方的ID,而第二个ID,即接收方的ID(大于0),如果你要广播给所有人,这个id设置为0即可。
③在线列表
第一个0,固定,代表服务器发来的,第二个0,在实际中是你自己的id
④退出聊天室
第一个0即代表退出的客户端id,这样,当一个客户端退出后,其他客户的界面中,相应的在线列表就能准备刷新了。
这条命令,本来后面两个零可以不要的,但为了统一格式,先留着吧,就当备用项,呵呵。
要实现的界面效果,我就先借用我们项目中的一个界面,以后再把内容填充好,大家先预览一下,这也算是我们的目标了
这一篇就当是准备工作吧,下一篇,我们详细解说一下,登录的实现。
源码--可留言。