Dowemo
0 0 0 0

background code

package com.xiaoc.websocket.servlet;import java.io.IOException;import java.util.Set;import java.util.concurrent.CopyOnWriteArraySet;import java.util.concurrent.atomic.AtomicInteger;import javax.websocket.OnClose;import javax.websocket.OnError;import javax.websocket.OnMessage;import javax.websocket.OnOpen;import javax.websocket.Session;import javax.websocket.server.ServerEndpoint;import org.apache.juli.logging.Log;import org.apache.juli.logging.LogFactory;@ServerEndpoint(value = "/websocket/chat")publicclasswebSocketDemoServlet {privatestaticfinal Log log = LogFactory.getLog(webSocketDemoServlet.class);
 privatestaticfinal String GUEST_PREFIX = "Guest";
 privatestaticfinal AtomicInteger connectionIds = new AtomicInteger(0);
 privatestaticfinal Set<webSocketDemoServlet> connections = new CopyOnWriteArraySet<webSocketDemoServlet>();
 private String nickname;
 private Session session;
 publicwebSocketDemoServlet() {
 nickname = GUEST_PREFIX + connectionIds.getAndIncrement();
 }
 /*
 * 当websocket的客户端连接到服务器时候,这个方法就会执行,并且传递一个session会话对象来
 * 我们拿到这话session,就是可以给客户端发送消息
 */@OnOpenpublicvoidstart(Session session) {
 this.session = session;
 connections.add(this);
 String message = String.format("* %s %s", nickname, "has joined.");
 broadcast(message);
 }
 /* 客户端被关闭时候,就会自动会调用这个方法 */@OnClosepublicvoidend() {
 connections.remove(this);
 String message = String.format("* %s %s", nickname, "has disconnected.");
 broadcast(message);
 }
 /* 客户端给服务器发送消息,这个方法会自动调用,并且可以拿到发送过来的数据 */@OnMessagepublicvoidincoming(String message) {
 //Never trust the client System.out.println(message);
 broadcast(message);
 }
 /* 发生了异常自动执行 */@OnErrorpublicvoidonError(Throwable t) throws Throwable {
 log.error("Chat Error:" + t.toString(), t);
 }
 /* 广播:遍历客户端集,发送消息,注意发送要用的session,用session.getBasicRemote().sendText(msg)发送消息 */privatestaticvoidbroadcast(String msg) {
 for (webSocketDemoServlet client : connections) {//遍历所有try {//如果这个client已经在线synchronized (client) {
 client.session.getBasicRemote().sendText(msg);//发送消息 }
 } catch (IOException e) {//如果这个client不在线 log.debug("Chat Error: Failed to send message to client", e);
 connections.remove(client);
 try {
 client.session.close();
 } catch (IOException e1) {
 //Ignore }
 String message = String.format("* %s %s", client.nickname, "has been disconnected.");
 broadcast(message);
 }
 }
 }
}

front page page

<!DOCTYPE HTML><html><head><title>WebSocket demo</title><style>body{
 padding:40px;}#outputPanel{
 margin:10px;
 padding:10px;
 background:#eee;
 border:1px solid #000;
 min-height:300px;}</style></head><body><inputtype="text"id="messagebox"size="60"/><inputtype="button"id="buttonSend"value="Send Message"/><inputtype="button"id="buttonConnect"value="Connect to server"/><inputtype="button"id="buttonClose"value="Disconnect"/><br><%
 out.println("Session ID =" + session.getId());
 %><divid="outputPanel"></div></body><scripttype="text/javascript">var infoPanel = document.getElementById('outputPanel'); //输出结果面板 var textBox = document.getElementById('messagebox'); //消息输入框 var sendButton = document.getElementById('buttonSend'); //发送消息按钮 var connButton = document.getElementById('buttonConnect');//建立连接按钮 var discButton = document.getElementById('buttonClose');//断开连接按钮 //控制台输出对象 var console = {
 log : function(text) { infoPanel.innerHTML += text + "<br>";
 }
 };
 //WebSocket演示对象 var demo = {
 socket : null, //WebSocket连接对象  host : '', //WebSocket连接 url  connect : function() {//连接服务器  window.WebSocket = window.WebSocket || window.MozWebSocket;
 if (!window.WebSocket) { //检测浏览器支持  console.log('Error: WebSocket is not supported. ');
 return;
 }
 this.socket = new WebSocket(this.host); //创建连接并注册响应函数 this.socket.onopen = function() { console.log("websocket is opened.");
 };
 this.socket.onmessage = function(message) { console.log(message.data);
 };
 this.socket.onclose = function() { console.log("websocket is closed.");
 demo.socket = null; //清理  };
 },
 send : function(message) {//发送消息方法 if (this.socket) {
 this.socket.send(message);
 returntrue;
 }
 console.log('please connect to the server first!!!');
 returnfalse;
 }
 };
 //初始化WebSocket连接 url  demo.host = (window.location.protocol == 'http:')? 'ws://' : 'wss://';
 demo.host += window.location.host + '/websocket/chat';
 //初始化按钮点击事件函数  sendButton.onclick = function() {var message = textBox.value;
 if (!message)
 return;
 if (!demo.send(message))
 return;
 textBox.value = '';
 };
 connButton.onclick = function() {if (!demo.socket)
 demo.connect();
 else console.log('websocket already exists. ');
 };
 discButton.onclick = function() {if (demo.socket)
 demo.socket.close();
 else console.log('websocket is not found. ');
 };</script></html>



Copyright © 2011 Dowemo All rights reserved.    Creative Commons   AboutUs