javaweb聊天室(spring websocket)

用javaweb写聊天室,可能大多人会困惑于怎么用广播让其他人看到消息,然而http协议是短链接进行访问模式,无法像tcp协议一样建立长链接,当然大多人想到用ajax定时访问服务器获得信息的方式,可这种方式在链接过多的时候效率比较低。

WebSocket协议是基于TCP的一种新的网络协议。它实现了浏览器与服务器全双工

(full-duplex)通信——允许服务器主动发送信息给客户端。

前端:

html页面必须引入:

然后在js代码中:

注意:链接404可能是你tomcat问题或者javaee版本问题,最好使用maven管理,并且使用maven的tomcat插件

后端用javaweb实现,采用spring+springmvc+websocket,先导入依赖,

 
        
            org.springframework
            spring-websocket
            ${spring.version}
        
        
            org.springframework
            spring-messaging
            ${spring.version}
        
        
            org.springframework
            spring-beans
            ${spring.version}
        
        
            org.springframework
            spring-webmvc
            ${spring.version}
        
spring配置文件:

	
	
springMVC配置文件:

	
	
	
下面是核心代码,注册websocket,就是把每一个链接注入同一个处理对象

@Configuration
@EnableWebSocket // 开启websocket
public class WebSocketConfig implements WebSocketConfigurer {
	@Autowired
	private WebSocketHander webSocketHander;
	public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
		registry.addHandler(webSocketHander, "/echo");
	}
}
下面是实现websockethadler:

@Service
public class WebSocketHander implements WebSocketHandler {

	private static final ArrayList users =
			new ArrayList();
	public void afterConnectionEstablished(WebSocketSession session)
			throws Exception {
		//链接成功进入方法
		users.add(session);//把新链接的用户加入list
	}

	public void handleMessage(WebSocketSession session,
		  WebSocketMessage webSocketMessage) throws Exception {
		//接受消息方法
		for(WebSocketSession user : users) {
			if (user.isOpen()) {
				user.sendMessage(new TextMessage(
						webSocketMessage.getPayload() + "")
						//发送消息为TextMessage对象格式
				);//给在线用户发送消息
			}
		}
	}

	public void handleTransportError(WebSocketSession session,
				 Throwable exception) {
		//出错
	}

	public void afterConnectionClosed(WebSocketSession session,
			  CloseStatus closeStatus) {
		//关闭
	}

	public boolean supportsPartialMessages() {
		return false;
	}
}
这样就完成了!
其他的就是自定义的功能了

我的项目:

javaweb聊天室(spring websocket)_第1张图片     javaweb聊天室(spring websocket)_第2张图片

用javaweb技术实现网络聊天室,即提供多人通过文字与命令进行实时交谈、聊天的网页,并且实时显示在线用户。

演示:http://120.78.164.110:8080/Chatrum/rum/chat.html

源码:https://github.com/Vimmone/Chatrum





你可能感兴趣的:(javaweb聊天室(spring websocket))