html5 websocket java_JavaEE7 HTML5利用WebSocket实现即时通讯

该博客介绍了如何使用Java的WebSocket API创建一个WebSocket服务器端,包括`@ServerEndpoint`注解的使用,以及`onOpen`, `onClose`, `onMessage`和`onError`方法的详细解释。在接收到客户端消息时,服务器会发送一系列测试消息。同时,还展示了WebSocket客户端的简单示例,说明了如何与服务器进行交互。
摘要由CSDN通过智能技术生成

WebSocket服务器端

WebSocketServer 代码:

packagecom.bing.biz.websocket;importjava.io.IOException;importjavax.websocket.OnClose;importjavax.websocket.OnError;importjavax.websocket.OnMessage;importjavax.websocket.OnOpen;importjavax.websocket.Session;importjavax.websocket.server.PathParam;importjavax.websocket.server.ServerEndpoint;//该注解用来指定一个URI,客户端可以通过这个URI来连接到WebSocket。类似Servlet的注解mapping。无需在web.xml中配置。

@ServerEndpoint("/webSocketServer/{userId}")public classWebSocketServer {/*** 连接建立成功调用的方法

*@paramsession 可选的参数。session为与某个客户端的连接会话,需要通过它来给客户端发送数据

*@throwsIOException*/@OnOpenpublic void onOpen(@PathParam("userId") String userId,Session session) throwsIOException{/*if(userId!=null){

if(!SocketUtils.hasConnection(userId)){

SocketUtils.put(userId,session);

}

else{

//相同用户只允许在一个地方登录(网页版内部判断)。

SocketUtils.sendMessage(userId,"forcelogout","该用户已在其他地方登录,此次登录将被强制退出。",0,"");

SocketUtils.remove(userId,session.getId());

SocketUtils.put(userId,session);

}

}*/System.out.println("Client connected "+userId);

}/*** 连接关闭调用的方法*/@OnClosepublic void onClose(@PathParam("userId") String userId,Session session)throwsIOException{//SocketUtils.remove(userId,session.getId());

System.out.println("Connection closed");

}/*** 收到客户端消息后调用的方法

*@parammessage 客户端发送过来的消息

*@paramsession 可选的参数

*@throwsIOException*/@OnMessagepublic void onMessage(@PathParam("userId") String userId,String message, Session session) throwsIOException {//Print the client message for testing purposes

System.out.println("Received: " +message);//Send the first message to the client

session.getBasicRemote().sendText("This is the first server message");//Send 3 messages to the client every 5 seconds

int sentMessages = 0;while(sentMessages < 3){

session.getBasicRemote().

sendText("This is an intermediate server message. Count: "

+sentMessages);

sentMessages++;

}//Send a final message to the client

session.getBasicRemote().sendText("This is the last server message");

}/*** 发生错误时调用

*@paramsession

*@paramerror*/@OnErrorpublic voidonError(Session session, Throwable error){

error.printStackTrace();

}

}

你可能已经注意到我们从 javax.websocket包中引入了一些类。

@ServerEndpoint 注解是一个类层次的注解,它的功能主要是将目前的类定义成一个websocket服务器端。注解的值将被用于监听用户连接的终端访问URL地址。

onOpen 和 onClose 方法分别被@OnOpen和@OnClose 所注解。这两个注解的作用不言自明:他们定义了当一个新用户连接和断开的时候所调用的方法。

onMessage 方法被@OnMessage所注解。这个注解定义了当服务器接收到客户端发送的消息时所调用的方法。注意:这个方法可能包含一个javax.websocket.Session可选参数(在我们的例子里就是session参数)。如果有这个参数,容器将会把当前发送消息客户端的连接Session注入进去。

本例中我们仅仅是将客户端消息内容打印出来,然后首先我们将发送一条开始消息,之后间隔5秒向客户端发送1条测试消息,共发送3次,最后向客户端发送最后一条结束消息。

WebSocket客户端

index.jsp代码:

Stringpath=request.getContextPath();StringbasePath=request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%>

Testing websockets
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值