WebSocket多人聊天室

WebSocket在楼主理解是一个即时通讯的技术实现,在Web浏览器和服务器之间进行任意的双向数据传输的一种技术。

它的实现其实在tomcat中就已经有列子了,只是有大部分人没有发现而已,在原始的Tomcat的它提供了几个列子

因为楼主在做WebRTC就把Tomcat弄了一下HTTPS协议,端口号也改成了Tomcat本身支持HTTPS协议的的端口号8443、在这里我用了谷歌浏览器的中文翻译

我们首先启动Tomcat、在它的官网我们可以看到它提供了列子给我们参考

WebSocket多人聊天室_第1张图片

在我们点进去之后他会出现3个跳转不同地方的路由,其中就有我们需要的websocket,进入第二个Chat example

WebSocket多人聊天室_第2张图片

它这里只是简单的提供了一下websocket的代码

WebSocket多人聊天室_第3张图片

在Tomcat的目录下提供了websocket所需的jar包:C:\Program Files\Apache Software Foundation\apache-tomcat-8.5.28\lib  这个目录是Tomcat的安装目录下的lib文件夹里面,找到我们需要的jar包:websocket-api.jar

在项目中新建java类,采用注解的方式,实现OnOpen/OnClose/OnMessage回调方法即可。代码如下:

import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import javax.websocket.OnClose;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.ServerEndpoint;

import com.lin.bean.Message;
import com.lin.mapper.JsonUtil;

/**
 * 创建多个房间的访问
 * 
 * Msgs
* 创建人:linchen
* 时间:2018年2月14日-下午6:35:58
* @version 1.0.0
* */ @ServerEndpoint("/video") public class Msgs { private String username;//当前用户 //所用用户通信管道 private static List sessions = Collections.synchronizedList(new ArrayList()); //所有用户列表 private static List users = Collections.synchronizedList(new ArrayList()); /** * @Onopen 就是建立连接时触发的事件 * 获取登录信息 * 并且把用户添加到用户列表中 */ @OnOpen public void open(Session session) { String query = session.getQueryString(); username = query.split("=")[1]; //把每个session添加到用户通信管道里面去 sessions.add(session); users.add(username); String msg = "欢迎" + username + "来到聊天室!"; Message message = new Message(); message.setWelcome(msg); message.setUsername(users); broadcast(sessions,JsonUtil.toString(message)); } /** * 发送广播 */ public void broadcast(List boradcast, String msg) { try { if (sessions.size() != 0) { for (Session s : sessions) { if (s != null) { s.getBasicRemote().sendText(msg); } } } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * 接收前端传来的消息/发送消息 */ @OnMessage public void onMessage(String msg, Session session) { System.out.println("前端发送的消息为:"+msg); Message message = new Message(); message.setUsername(users); message.setContext(username, msg); broadcast(sessions,JsonUtil.toString(message)); } /* * 客户端断开链接后将其从线程安全的集合中移除 */ @OnClose public void onClose(Session session) { sessions.remove(session); } }

Message类:

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

public class Message {
	private String welcome;
	private List username; //存放用户集合
	private String context;
	
	public String getWelcome() {
		return welcome;
	}
	public void setWelcome(String welcome) {
		this.welcome = welcome;
	}
	public List getUsername() {
		return username;
	}
	public void setUsername(List username) {
		this.username = username;
	}
	public String getContext() {
		return context;
	}
	public void setContext(String context) {
		this.context = context;
	}
	public void setContext(String name,String msg) {
		this.context = name +" 在"
				+ new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(new Date()) + "说
" + msg + "
" ; } }

视图层代码用了ssm框架springmvc做视图跳转

import javax.servlet.http.HttpServletRequest;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

/**
 * 进入首页方法
 * 
 * IndexController
* 创建人:linchen
* 时间:2018年3月1日-下午4:11:45
* @version 1.0.0
* */ @Controller public class IndexController { /** * (进入登录页面)
* 方法名:login
* @param request * @return String
*/ @RequestMapping("/login") public String login(HttpServletRequest request) { return "login"; } /** * (进入聊天室)
* 方法名:index
* @param request * @param account * @return String
*/ @RequestMapping("/logins") public String index(HttpServletRequest request,String account) { request.getSession().setAttribute("user", account); return "index"; } }

前端代码的实现:

login.jsp


index.jsp:


 

WebSocket多人聊天室_第4张图片

WebSocket多人聊天室_第5张图片

本文参考了:https://blog.csdn.net/yinqingwang/article/details/52565133

如果在https的情况下websocket创建必须加上一个s:ws = new WebSocket("wss://192.168.0.102:8080/WebRTC/video")

你可能感兴趣的:(WebSocket多人聊天室)