java版的WebSocket测试服务器

这是一个封装好的WebSocket服务器,通过简单的扩展就可以实现基于websocket的服务。写这个工具的主要目的是为了用于方便websocket应用的前端和服务器同时开发。

比如做HTML5游戏一般都是服务器和客户端同时开发。在开发之前最重要的就是制定通信协议,但游戏客户端在开发时可能需要调用接口,此时如果服务器端还未实现的话,就可能影响客户端的开发工作,用这个就可以解决问题。

可以在开发游戏客户端前,完成通信接口的简单实现,下面是一个调用示例:

import org.json.JSONException;
import org.json.JSONObject;

import com.hoverlees.ws.*;

public class Test implements WebSocketHandler {
	private int id=1;
	public Test(){
		WebSocketServer server;
		server=new WebSocketServer(8766);
		server.setHandler("/", this);
		try {
			server.start();
		} catch (WebSocketServerException e) {
			e.printStackTrace();
		}
	}
	public static void main(String[] args){
		new Test();
	}

	@Override
	public void onConnect(WebSocketServer server,WebSocketSession session) {
		System.out.println("用户["+id+"]进入.");
		session.userData=id;
		id++;
		server.sendPacket(session, ("Hello!".getBytes()));
	}
	@Override
	public void onPacket(WebSocketServer server,WebSocketSession session, WebSocketPacket packet) {
		System.out.println("收到用户["+session.userData+"]数据: \""+packet.getStringData()+"\"");
		try{
			JSONObject obj=new JSONObject(packet.getStringData());
			String cmd=obj.getString("cmd");
			if(cmd.equals("add")){
				int sum=obj.getInt("a")+obj.getInt("b");
				server.sendPacket(session, ("a+b="+sum).getBytes());
			}
			else if(cmd.equals("sub")){
				int sub=obj.getInt("a")-obj.getInt("b");
				server.sendPacket(session, ("a-b="+sub).getBytes());
			}
		}catch(JSONException e){
			e.printStackTrace();
		}
	}
	@Override
	public void onDisconnect(WebSocketServer server,WebSocketSession session) {
		System.out.println("用户["+session.userData+"]退出.");
	}
}


类库下载地址:
http://www.hoverlees.com/diy/sources/hwebsocket/hWebSocket.zip
为了方便搜索引擎进入的观众,加了些链接查看源代码:
Test

com.hoverlees.http.HTTPRequestParser

com.hoverlees.utils.Base64Encoder

com.hoverlees.ws.WebSocketHander

com.hoverlees.ws.WebSocketPacket

com.hoverlees.ws.WebSocketServer

com.hoverlees.ws.WebSocketSession

Join the Conversation

2 Comments

Leave a Reply to hoverlees

Your email address will not be published. Required fields are marked *

  1. 你好,可以在throw new WebSocketServerException前面加上e.printStackTrace();
    我估计是端口被占用导致的。

  2. com.hoverlees.ws.WebSocketServerException: Error 2: 无法创建Socket
    at com.hoverlees.ws.WebSocketServer.start(WebSocketServer.java:99)
    at Test.(Test.java:13)
    at Test.main(Test.java:19)

    你好,先谢谢你的讲解,我遇到这个问题不知道那个地方出错,新手望解答,谢谢