体验WebSocket

- WebSocket Javascript Client
- WebSocket Java Client
- WebSocket Server


环境:

java version "1.7.0_71"

pom.xml

  	<dependency>
		<groupId>org.eclipse.jetty.websocket</groupId>
		<artifactId>websocket-server</artifactId>
		<version>9.2.8.v20150217</version>
	</dependency>

  	 <dependency>
		  <groupId>org.eclipse.jetty.websocket</groupId>
		  <artifactId>websocket-client</artifactId>
		  <version>9.2.8.v20150217</version>
	</dependency>


WebSocket Javascript Client

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>WebSocket Test</title>
<script src="external/jquery/jquery.js"></script>
<script>
 $(function() {
		var wsUri = "ws://localhost:8080/echo";
		
		var websocket = new WebSocket(wsUri);
		websocket.onopen = function(evt) {
			onOpen(websocket, evt)
		};
		websocket.onclose = function(evt) {
			onClose(evt)
		};
		websocket.onmessage = function(evt) {
			onMessage(websocket, evt)
		};
		websocket.onerror = function(evt) {
			onError(evt)
		};
})
	
function onOpen(websocket, evt) {
	writeToScreen("CONNECTED");
	
	var msg = "test msg";
	writeToScreen("SENT: " + msg);
	websocket.send(msg);
}

function onClose(evt) {
	writeToScreen("DISCONNECTED");
}

function onMessage(websocket, evt) {
	writeToScreen('<span style="color: blue;">RESPONSE: ' + evt.data + '</span>');
	websocket.close();
}

function onError(evt) {
	writeToScreen('<span style="color: red;">ERROR:</span> ' + evt.data);
}

function writeToScreen(message) {
	$("#output").append("<p>" + message + "</p>");
}
</script>

<body>
	<h2>WebSocket Test</h2>
	
	<div id="output"></div>
</body>

</html>

Ref: http://www.websocket.org/echo.html


WebSocket Java Client

package examples;

import java.net.URI;
import java.util.concurrent.TimeUnit;
import org.eclipse.jetty.websocket.client.ClientUpgradeRequest;
import org.eclipse.jetty.websocket.client.WebSocketClient;

/**
 * Example of a simple Echo Client.
 */
public class SimpleEchoClient {
 
    public static void main(String[] args) {
    	String destUri = "ws://localhost:8080/echo";
        if (args.length > 0) {
            destUri = args[0];
        }
        WebSocketClient client = new WebSocketClient();
        SimpleEchoSocket socket = new SimpleEchoSocket();
        try {
            client.start();
            URI echoUri = new URI(destUri);
            ClientUpgradeRequest request = new ClientUpgradeRequest();
            client.connect(socket, echoUri, request);
            System.out.printf("Connecting to : %s%n", echoUri);
            socket.awaitClose(50, TimeUnit.SECONDS);
        } catch (Throwable t) {
            t.printStackTrace();
        } finally {
            try {
                client.stop();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}


package examples;
 
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
import org.eclipse.jetty.websocket.api.Session;
import org.eclipse.jetty.websocket.api.StatusCode;
import org.eclipse.jetty.websocket.api.annotations.OnWebSocketClose;
import org.eclipse.jetty.websocket.api.annotations.OnWebSocketConnect;
import org.eclipse.jetty.websocket.api.annotations.OnWebSocketMessage;
import org.eclipse.jetty.websocket.api.annotations.WebSocket;
 
/**
 * Basic Echo Client Socket
 */
@WebSocket(maxTextMessageSize = 64 * 1024)
public class SimpleEchoSocket {
 
    private final CountDownLatch closeLatch;
 
    @SuppressWarnings("unused")
    private Session session;
 
    public SimpleEchoSocket() {
        this.closeLatch = new CountDownLatch(1);
    }
 
    public boolean awaitClose(int duration, TimeUnit unit) throws InterruptedException {
        return this.closeLatch.await(duration, unit);
    }
 
    @OnWebSocketClose
    public void onClose(int statusCode, String reason) {
        System.out.printf("Connection closed: %d - %s%n", statusCode, reason);
        this.session = null;
        this.closeLatch.countDown();
    }
 
    @OnWebSocketConnect
    public void onConnect(Session session) {
        System.out.printf("Got connect: %s%n", session);
        this.session = session;
        try {
            Future<Void> fut;
            fut = session.getRemote().sendStringByFuture("Hello");
            fut.get(20, TimeUnit.SECONDS);
            fut = session.getRemote().sendStringByFuture("Thanks for the conversation.");
            fut.get(20, TimeUnit.SECONDS);
            session.close(StatusCode.NORMAL, "I'm done");
        } catch (Throwable t) {
            t.printStackTrace();
        }
    }
 
    @OnWebSocketMessage
    public void onMessage(String msg) {
        System.out.printf("Got msg: %s%n", msg);
    }
}

Ref: http://www.eclipse.org/jetty/documentation/current/jetty-websocket-client-api.html


WebSocket Server :

import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.handler.DefaultHandler;
import org.eclipse.jetty.server.handler.HandlerList;
import org.eclipse.jetty.servlet.ServletContextHandler;
import org.eclipse.jetty.servlet.ServletHolder;

public class WebServer {
	public static void main(String[] args) {
		Server server = new Server(8080);  
		try {
		    HandlerList handlerList = new HandlerList();  
		    ServletContextHandler context = new ServletContextHandler(  
		            ServletContextHandler.SESSIONS);  
		    context.setContextPath("/");
		    context.addServlet(new ServletHolder(new MyEchoServlet()), "/echo");  
		    handlerList.addHandler(context);  
		    handlerList.addHandler(new DefaultHandler());  
		    server.setHandler(handlerList);  
		    server.start();  
		    server.join();  
		} catch (Exception e) {  
		  
		    e.printStackTrace();  
		}  
	}


}

import javax.servlet.annotation.WebServlet;
import org.eclipse.jetty.websocket.servlet.WebSocketServlet;
import org.eclipse.jetty.websocket.servlet.WebSocketServletFactory;

@SuppressWarnings("serial")
@WebServlet(name = "MyEcho WebSocket Servlet", urlPatterns = { "/echo" })
public class MyEchoServlet extends WebSocketServlet {
    @Override
    public void configure(WebSocketServletFactory factory) {
        factory.getPolicy().setIdleTimeout(10000);
        factory.register(MyEchoSocket.class);
        
    }
}

import java.io.IOException;
import org.eclipse.jetty.websocket.api.Session;
import org.eclipse.jetty.websocket.api.annotations.OnWebSocketClose;
import org.eclipse.jetty.websocket.api.annotations.OnWebSocketConnect;
import org.eclipse.jetty.websocket.api.annotations.OnWebSocketMessage;
import org.eclipse.jetty.websocket.api.annotations.WebSocket;
 
/**
 * Basic Echo Socket
 */
@WebSocket(maxTextMessageSize = 64 * 1024)
public class MyEchoSocket {
 
    private Session session;
 
    public MyEchoSocket() {
    }
 
    @OnWebSocketClose
    public void onClose(int statusCode, String reason) {
        System.out.printf("Connection closed: %d - %s%n", statusCode, reason);
        this.session = null;
    }
 
    @OnWebSocketConnect
    public void onConnect(Session session) {
        System.out.printf("Got connect: %s%n", session);
        this.session = session;
    }

    @OnWebSocketMessage
    public void onMessage(String msg) {
        System.out.printf("Got msg: %s%n", msg);
        try {
		session.getRemote().sendString("RESPONSE : " + msg);
	} catch (IOException e) {
		e.printStackTrace();
	}
    }
}
Ref: http://www.eclipse.org/jetty/documentation/current/jetty-websocket-server-api.html



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值