介绍
websocket我这文章就不介绍了,具体意思百度查下,很简单。
我就一句话介绍下,实时通信的!
项目
我把我这个简易版聊天平台源码开源发在这篇文章里面。
用法,以及每个模块的功能都说尽量的说详细点。
源码
maven
Java代码
前端页面
介绍
源码上面很清楚,如果maven不全,那就自行百度查下需要了自己粘贴找一个就行了。主要是我想介绍下这里面的重点。
- 第一点我要说的很简单,你要使用这个还是去百度查下这玩意是干啥的,其实我理解为就是双向通信用的。
- 这个里面前端里面也有几个方法,我源码里面也写到了。onopen:用于指定连接成功后的回调函数;onmessage:用于指定当从服务器接受到信息时的回调函数;onclose:用于指定连接关闭后的回调函数;onerror:用于指定连接失败后的回调函数; 我个人感觉这几个最为重要,其他可以了解了解就欧克了
- 连接呢,前端new WebSocket("ws://"+document.location.host+"/websock/"+username);后端@ServerEndpoint("/websock/{name}");这样即可以,也就是意思必须保持一样的,要不然匹配不上,就会连不上。
- 必须配置上面那个通信通道,要不然没有用的
- 发消息呢,也就是我源码中sendMessage()函数中,websocket.send(message);也就是用上面所提到的websocket对象调用send函数即可,如果你配置没有问题的话,此时此刻你调用了那便把数据发送到后端去了。后端接收的方法等哈下面会提到。这里利用的json格式字符串传入的,后端怎么接收我也会说到
- 第三点呢,算是补充,大家可以在各个方法里面增加对应的功能,可扩展类型的,比如我写了连接成功会有一个好友上线功能。你可以在用户退出增加一个好友下线功能等等。
- 待补充。。。。
后端介绍就有点多了
好友上线功能
利用OnOpen这个方法来判断那些好友上线了,我做了对应的处理。使用了一个list集合,因为只是统计用户名字,所以用list接口很简单。写法有很多种。
功能实现过程:在连接的时候存入对应的名字到list集合,如果现在有第二人上线了,把list集合直接遍历下即可,但是切记一定要把第二人用户名除去。然后把list集合对应的结果放入到字符串里面即可,你可以也做出对应的处理。我这里没有做。
整理好字符串利用这个session.getAsyncRemote().sendText("当前无人在线,欢迎使用");这个意思就是把此消息,返回到当前用户的页面端。也就是这个消息是本人看的。还有一个是发送到对方的,我没有在源码里面的,下面会提到。
私聊功能
利用OnMessage这个函数来接收消息等前端发送过来的东西。我这里先解析json字符串,然后提取到对应的用户账号和消息字符串。提取到对应的用户名字,然后去存放的map集合里面查找对应的session是否存在(肯定是存在的),我知道存在,但是必须找到对应的,因为给对方发消息,必须要用对方的session,找到之后,我还是做的看对方的session是否存活,要不然就判断对方不在线,要不然在发送,发送也相当的简单tosession.getAsyncRemote().sendText(username+"群发了一个为消息:"+toMessage);用对方的sesson发送即可。
群聊模式
私聊模式懂了,群聊更简单,无非就是要把在线的用户,每个session都要拿到,然后在发送。
这里重点要说的就是,必须排除本用户,也就是那个要用要发群消息,那就把那个用户排除,然后利用剩下用户的session给他们发消息即可,代码也写到了
群聊和私聊代码有点类似,无非就是稍微有所改动。
总结
这次吸收不错,这篇文章我也写了快1个消息,尽可能的希望大家都可以简单的上手,里面有很多功能没有扩展,因为我要去补作业,马上期末了,后面功能在说吧,源码上面也发了,可以自己玩玩,运行截图就不放出来了。
文章全部是本人原创,请勿转发,谢谢配合,版权所有-南香香-你会喜欢我吗
白骨王后
五郎八卦棍粤配
牛
哈哈哈哈哈哈