博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java web 在线聊天的基本实现
阅读量:5020 次
发布时间:2019-06-12

本文共 4405 字,大约阅读时间需要 14 分钟。

随着互联网的发展,http的协议有些时候不能满足需求,比如在现聊天的实现.如果使用http协议必须轮训,或者使用长链接.必须要一个request,这样后台才能发送信息到前端.

后台不能主动找客户端通信.而且每次请求heard都带有很多的信息.这样也很占用宽带.这是websocket.

因为主要是为了学习,所以前台很粗糙.没有css.

1.后台实现

后台一共有两个类 一个是个imessage类,就是一个信息的bean.另一个类是socket,这个类主要是处理信息的发送.

Message.java如下:

1 package com.socket; 2  3 public class Message { 4     private String id; 5     private String msg; 6     private String from; 7     private String to; 8  9 10     public String getFrom() {11         return from;12     }13 14     public void setFrom(String from) {15         this.from = from;16     }17 18     public String getTo() {19         return to;20     }21 22     public void setTo(String to) {23         this.to = to;24     }25 26     public String getId() {27         return id;28     }29 30     public void setId(String id) {31         this.id = id;32     }33 34     public String getMsg() {35         return msg;36     }37 38     public void setMsg(String msg) {39         this.msg = msg;40     }41 42 }

socket.Java代码如下:

1 package com.socket; 2  3 import java.io.IOException; 4 import java.util.HashMap; 5 import java.util.Map; 6 import java.util.Set; 7  8 import javax.websocket.OnMessage; 9 import javax.websocket.OnOpen;10 import javax.websocket.Session;11 import javax.websocket.server.ServerEndpoint;12 13 import com.google.gson.Gson;14 15 @ServerEndpoint("/websocket")16 public class Socket {17     public static Map
sessionMap = new HashMap
();18 private Session session;19 20 @OnOpen21 public void startSocket(Session session) {22 this.session = session;23 System.out.println("链接成功");24 if (sessionMap.size() == 0) {25 return ;26 }27 Set userIds = sessionMap.keySet();28 StringBuffer sBuffer = new StringBuffer();29 for (Object str : userIds) {30 sBuffer.append(str.toString() + ":");31 }32 Gson gson = new Gson();33 try {34 Message message = new Message();35 message.setFrom("系统");36 message.setMsg(sBuffer.toString());37 session.getBasicRemote().sendText(gson.toJson(message),true);38 } catch (IOException e) {39 // TODO Auto-generated catch block40 e.printStackTrace();41 }42 }43 44 @OnMessage45 public void getMessgae(Session session, String str, boolean last) {46 if (session.isOpen()) {47 try {48 System.out.println(str);49 Gson gson = new Gson();50 Message msg = gson.fromJson(str, Message.class);51 Message toMessage = msg;52 toMessage.setFrom(msg.getId());53 toMessage.setTo(msg.getTo());54 55 if (msg.getMsg().equals("newUser")) {56 if (sessionMap.containsKey(msg.getId())) {57 sessionMap.remove(msg.getId());58 }59 sessionMap.put(msg.getId(), session);60 } else {61 Session toSession = sessionMap.get(msg.getTo());62 if (toSession != null && toSession.isOpen()) {63 toSession.getBasicRemote().sendText(gson.toJson(toMessage).toString(), last);64 } else {65 toMessage.setMsg("用户不存在");66 toMessage.setFrom("系统");67 session.getBasicRemote().sendText(gson.toJson(toMessage).toString(), last);68 }69 }70 } catch (IOException e) {71 // TODO Auto-generated catch block72 e.printStackTrace();73 }74 75 } else {76 System.out.println("session is closed");77 }78 }79 }

2 前端代码

前台主要使用的是Jquery库来操作一些dom. 后台开启的是 8889端口,所以前端要调用 ws://localhost:8889/webChat/websocket,如果自己实现请改自己的端口

js和html如下:

                
Test WebSocket
ID:
toUser:
内容:

 

以上的这些就是简单的实现一个在线web聊天.

转载于:https://www.cnblogs.com/guoke-jsp/p/6047496.html

你可能感兴趣的文章
MYSQL进阶学习笔记五:MySQL函数的创建!(视频序号:进阶_13)
查看>>
关于此博客
查看>>
HTML---仿网易新闻登录页
查看>>
[arm]虚拟机,2440开发板,主机三者互通
查看>>
HTML学习笔记之三(localstorage的使用)
查看>>
Android 获取SD卡路径和推断SD卡是否存在
查看>>
Android从无知到有知——NO.1
查看>>
action属性注入为null
查看>>
XAMPP下的composer的安装
查看>>
POJ3057 Evacuation(二分图最大匹配)
查看>>
HDU5739 Fantasia(点双连通分量 + Block Forest Data Structure)
查看>>
Ubuntu 16.04配置Java开发环境
查看>>
apue 2ed 和 unp 3ed 环境配置
查看>>
CSS.textarea无边框且背景透明
查看>>
kubernetes 用到的工具及组件
查看>>
Ubuntu 永久挂载硬盘 & 修改盘符
查看>>
Java实现单向链表基本功能
查看>>
项目随想
查看>>
07.计算Nova→4.源码→2.RPC机制
查看>>
暗袭 2007?
查看>>