WebScoket 实例 简单的网页聊天室

WebScoket 是H5的新特性 具体的可以百度,

首先html







聊天室

发送

再是服务端的代码。。

前端需要注意的是 new WebScoket中的 url  其写法为"ws://localhost:8080/chartRoom/room/" + name;  

名称以ws开头 类似于http  再是你的ip地址和端口号  charRoom为项目的名称 room为当前服务端@ServerEndpoint("/room/{param}")中注解的 地址 name就是注解中的参数 param

package com.qhit.web.scoket;

import java.io.IOException;
import java.util.concurrent.CopyOnWriteArraySet;

import javax.websocket.CloseReason;
import javax.websocket.OnClose;
import javax.websocket.OnError;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.PathParam;
import javax.websocket.server.ServerEndpoint;
//这里的parm是浏览器传来的参数
@ServerEndpoint("/room/{param}")
public class ChartRoom {

	private Session session;
	private String name;
        //这里采用线程安全的set单例集合来存放聊天室的用户对象
	private static CopyOnWriteArraySet set = new CopyOnWriteArraySet<>();

	// 连接打开时执行
	@OnOpen
	public void onOpen(@PathParam(value = "param") String param, Session session) throws IOException {
                //因为我用的tomcat版本是7.0的所以要进行转码
		String name = new String(param.getBytes("iso8859-1"), "utf-8");
		System.out.println(name);
		this.name = name;
		this.session = session;
		set.add(this);
		System.out.println("欢迎" + this.name + "进入聊天室");
                //如果这个集合 不为空 则遍历集合 给每个用户 发送消息
		if (set != null) {
			for (ChartRoom chartRoom : set) {
                                
				chartRoom.sendMessage("欢迎" + this.name + "进入聊天室");
			}
		} else {
			sendMessage("欢迎" + this.name + "进入聊天室");
		}

	}

	// 收到消息时执行
	@OnMessage
	public void onMessage(String message, Session session) {
		

                //客户端收到消息的时候 遍历集合 然后实现消息的广播
		for (ChartRoom socket : set) {

			try {
				if (socket != this) {

                                        //这里是自定义的广播方法
					socket.sendMessage(this.name + "说:" + message);
				}

			} catch (IOException e) {
			}
		}

	}

	// 连接关闭时执行
	@OnClose
	public void onClose(Session session, CloseReason closeReason) {
                //当用户退出的时候 在set集合中删除当前对象
		set.remove(this);
		System.out.println(this.name+"退出了聊天室");
	}

	// 连接错误时执行
	@OnError
	public void onError(Throwable t) {
		t.printStackTrace();
	}

	// 自定义的方法,用于发送消息
	public void sendMessage(String message) throws IOException {   

		this.session.getBasicRemote().sendText(message);

		// this.session.getAsyncRemote().sendText(message);
	}

}

这样 一个简单的聊天室就写好了

下面看 效果图把

WebScoket 实例 简单的网页聊天室_第1张图片

你可能感兴趣的:(WebScoket 实例 简单的网页聊天室)