WebSocket示例

WebSocket示例

 

 

到目前为止各服务器对Websocket支持都不同,各做各的,还没有一个统一的标准 ,但是其实现方法基本上是一样的  。

下面为大家介绍一下  在MyEclipse和jetty环境下的使用

先把代码贴起 :

SocketMe .java

package com.dql.socket;

import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;

import org.eclipse.jetty.websocket.*;
public class SocketMe extends  WebSocketServlet{

	@Override
	public WebSocket doWebSocketConnect(HttpServletRequest arg0, String arg1) {
		// TODO Auto-generated method stub
		return new MeWebSocket();
	}

}
   

MeWebSocket.java


package com.dql.socket;
import java.io.IOException;

import org.eclipse.jetty.websocket.*;

import com.dql.servlet.InitServlet;
public class MeWebSocket implements WebSocket.OnTextMessage{
	public WebSocket.Connection connection;

	@Override
	public void onClose(int arg0, String arg1) {
		// TODO Auto-generated method stub
		InitServlet.getSocketList().remove(this);
		System.out.println("onclose!!!!");
		
	}

	@Override
	public void onOpen(Connection conn) {
		// TODO Auto-generated method stub
		InitServlet.getSocketList().add(this);
		this.connection  = conn;
		System.out.println("onOpen=========================="+conn.getMaxIdleTime());  
		
	}

	@Override
	public void onMessage(String arg0) {
		// TODO Auto-generated method stub
		System.out.println("接受到的信息:"+arg0);
		try {
			for(MeWebSocket socket:InitServlet.getSocketList()){
				socket.getConnection().sendMessage("返回的信息!!!!!!!"+arg0);
			}
			
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}

	public WebSocket.Connection getConnection() {
		return connection;
	}

	public void setConnection(WebSocket.Connection connection) {
		this.connection = connection;
	}

 }  

	
	



InitServlet .java

package com.dql.servlet;

import java.util.ArrayList;
import java.util.List;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;

import com.dql.socket.MeWebSocket;

public class InitServlet extends HttpServlet {  
		 
		    private static final long serialVersionUID = -1936532122758235837L;  
		      
		    private static List<MeWebSocket> socketList;  
		      
	  public void init(ServletConfig config) throws ServletException {  
		        InitServlet.socketList = new ArrayList<MeWebSocket>();  
		        super.init(config);  
		       System.out.println("Server start============");  
		    }  
		      
		    public static synchronized List<MeWebSocket> getSocketList() {  
		        return InitServlet.socketList;  
		    }  
		  
		}  



Web.xml

 <servlet>  
    <servlet-name>initServlet</servlet-name>  
    <servlet-class>com.dql.servlet.InitServlet</servlet-class>  
    <load-on-startup>1</load-on-startup>  
 </servlet> 
  
   <servlet>
          <servlet-name>alarmServlet</servlet-name>
         <servlet-class>com.dql.socket.SocketMe</servlet-class>        
     </servlet>
 
     <servlet-mapping>
         <servlet-name>alarmServlet</servlet-name>
         <url-pattern>/alarmServer</url-pattern>
     </servlet-mapping>

 

Websocket.html

<!DOCTYPE html>
<html>
  <head>
    <title>Web Socket Demo</title>
	
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="this is my page">
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
    
    <!--<link rel="stylesheet" type="text/css" href="./styles.css">-->
     

        <script type="text/javascript">
        var ws = null;
        function startServer() {

            // 设定WebSocket,注意协议是ws,请求是指向对应的WebSocketServlet的

            var url = "ws://127.0.0.1:8080/New/alarmServer";

            // 创建WebSocket实例,下面那个MozWebSocket是Firefox的实现

            if ('WebSocket' in window) {

                ws = new WebSocket(url);

            } else if ('MozWebSocket' in window) {

                ws = new MozWebSocket(url);

            } else {

                alert('Unsupported.');

                return;

            }

 

            // WebSocket握手完成,连接成功的回调

            // 有个疑问,按理说new WebSocket的时候就会开始连接了,如果在设置onopen以前连接成功,是否还会触发这个回调

            ws.onopen = function() {

               // alert('Opened!');

            };
            
            ws.οnerrοr=function(){
               alert(error);
            }

 

            // 收到服务器发送的文本消息, event.data表示文本内容

            ws.onmessage = function(event) {

               // alert('Receive message: ' + event.data);
                var label = document.getElementById("area");
               // alert(label.innerHTML);
                label.innerHTML = label.innerHTML+ event.data+"\r\n";

            };

 

            // 关闭WebSocket的回调

            ws.onclose = function() {

                //alert('Closed!');

            };

        }

        function sendMyMessage() {

            var textMessage = document.getElementById('textMessage').value;
            if(ws != null && textMessage != '') {
                // 通过WebSocket想向服务器发送一个文本信息
                ws.send(textMessage);
            }

        }

        </script>
    

  </head>
  
 <body οnlοad="startServer()">
 		 <textarea rows="30" cols="50" id="area"></textarea><br>
        <input type="text" id="textMessage" size="20" />
        <input type="button" οnclick="sendMyMessage()" value="Send"><br>
  </body>

</html>


 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值