这是一个封装好的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+"]退出.");
}
}