Websocket学习--简易聊天室
2013-08-24 00:25
183 查看
Websocket:
websocket是专为推送业务实现的一种轻量级消息传输协议,具有占用宽带和服务器资源小、异步实时的特点
技术上可以将websocket理解为一种升级版的http协议,其格式跟http差不多。
Javascript API
new Websocket(url)
websocket.close();
四中状态(CONNECTING、OPEN、CLOSED、CLOSING)
四个回调方法(onOpen、onMessage、onClose、onError)
Java API
一个连接--->一个会话--->一个ServerEndpoint
@ServerEndpoint(value/encoder/decoder)
onOpen/onClose/onError/onMessage
@PathParam
代码示例:
ServerEndpoint
聊天室界面:
效果截图:
websocket是专为推送业务实现的一种轻量级消息传输协议,具有占用宽带和服务器资源小、异步实时的特点
技术上可以将websocket理解为一种升级版的http协议,其格式跟http差不多。
Javascript API
new Websocket(url)
websocket.close();
四中状态(CONNECTING、OPEN、CLOSED、CLOSING)
四个回调方法(onOpen、onMessage、onClose、onError)
Java API
一个连接--->一个会话--->一个ServerEndpoint
@ServerEndpoint(value/encoder/decoder)
onOpen/onClose/onError/onMessage
@PathParam
代码示例:
ServerEndpoint
package me.ypqiao.chat_wsocket; import java.io.IOException; import javax.websocket.CloseReason; import javax.websocket.EndpointConfig; 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; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; /** * * @author ypqiao */ @ServerEndpoint("/chat/{name}") public class ChatServerEndpoint { private static Log log = LogFactory.getLog(ChatServerEndpoint.class); @OnOpen public void onOpen(Session session, EndpointConfig cof, @PathParam("name")String name){ log.debug(" "+name+" connected successfully "); session.getUserProperties().put("name", name); } @OnClose public void onClose(Session session,CloseReason reson){ log.debug(" "+((String)session.getUserProperties() .get("name"))+" disconnected successfully "); } @OnMessage public void onMessage(Session session,String msg){ String msgSent = msg; for(Session s : session.getOpenSessions()){ if(s.isOpen()){ try { s.getBasicRemote() .sendText(((String)session.getUserProperties() .get("name"))+": "+msgSent+"\r\n"); } catch (IOException ex) { log.error(ex.getMessage(),ex); } } } } @OnError public void OnError(Session session,Throwable e){ log.error(e.getMessage(),e); } }
聊天室界面:
<%-- Document : index Created on : Aug 21, 2013, 10:35:49 AM Author : ypqiao --%> <%@page contentType="text/html" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Welcom to Chat-room</title> <script src="js/jquery-2.0.3.min.js"></script> <script lang="text/javascript"> var wsocket = null; function connect(){ if(wsocket != null && (wsocket.readyState == 0 || wsocket.readyState == 1)){ wsocket.close(); } else{ var url = "ws://"+$("#hostText").val()+":"+$("#portText").val()+"/chat_wsocket/chat/"+$("#nameText").val(); $("#tipLabel").text("connecting..."); wsocket = new WebSocket(url); wsocket.onopen = function (evt) { onOpen(evt) }; wsocket.onclose = function (evt) { onClose(evt) }; wsocket.onmessage = function (evt) { onMessage(evt) }; wsocket.onerror = function (evt) { onError(evt) }; } } function send(){ if( !wsocket){ alert("connect first"); return; } try{ wsocket.send($("#chatText").val()); $("#chatText").val(""); } catch( e ){ alert(" send fail,try agin..."); } } function onOpen(evt) { $("#nameText").prop("readonly",true); $("#hostText").prop("readonly",true); $("#portText").prop("readonly",true); $("#conButton").prop("value","disconnect"); $("#tipLabel").text("connected"); } function onClose(evt) { $("#nameText").prop("readonly",false); $("#hostText").prop("readonly",false); $("#portText").prop("readonly",false); $("#conButton").prop("value","connect"); $("#tipLabel").text("closed"); } function onMessage(evt) { $("#contentArea").text( $("#contentArea").text()+evt.data); } function onError(evt) { console.log('Error occured: ' + evt.data); } </script> </head> <body> <h3>Welcom to Chat-room</h3> <hr/> Name:<input type="text" id="nameText"/> Host:<input type="text" id="hostText"/> Port:<input type="text" id="portText"/> <input type="button" value="connect" onclick="connect();" id="conButton"/><br/><br> <textarea id="contentArea" style="margin: 2px; width: 731px; height: 122px;" ></textarea> <br/><br/> Chat:<input type="text" id="chatText" width="100px"/> <input id="sendButton" type="button" value="send" onclick="send()"> <label style="color: orange" id="tipLabel"></label><br/> </body> </html>
效果截图:
相关文章推荐
- 学习WebSocket(二):使用Spring WebSocket做一个简单聊天室
- Node.js + WebSocket 实现的简易聊天室
- SpringBoot学习——websocket组件学习在线聊天室demo
- WebSocket实现简易聊天室
- php+websocket搭建简易聊天室实践
- php基于websocket搭建简易聊天室实践
- WebSocket 学习(五)--用socketIO实现聊天室
- tornado websocket 学习demo:简单聊天室
- 14级团队学习成果汇报 -- 利用express+socket.io搭建简易版聊天室
- php基于websocket搭建简易聊天室(socket)
- express框架实现基于Websocket建立的简易聊天室
- Java、WebSocket、HTML简易聊天室
- 使用go,基于martini,和websocket开发简易聊天室
- 基于node的websocket学习笔记二:一个简单的聊天室程序与优化方案
- websocket简易聊天室
- 完成端口学习之简易聊天室
- golang基于websocket实现的简易聊天室程序
- php基于websocket搭建简易聊天室实践
- 使用Html5下WebSocket搭建简易聊天室
- Tomcat学习总结(4)——基于Tomcat7、Java、WebSocket的服务器推送聊天室