web socket,我的理解就是他通过一种新的协议可以保持客户端与服务器一直的连接,http是请求后断开,等待对方相应,web socket是请求后继续连接,直到我再次请求断开。以java,jsp为例做了一个小demo。
首先是服务端代码,没有用servlet而是用了一个普通类:
package wang;
import java.io.IOException;
import java.util.Set;
import java.util.concurrent.CopyOnWriteArraySet;
import javax.websocket.OnClose;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.PathParam;
import javax.websocket.server.ServerEndpoint;
//该标签表示了websocket的路径,后面大括号里的可以用来传递参数
@ServerEndpoint("/webscoket/{userName}")
public class WebScoketTest {
//用来存放连接,也可以只存放session,但如果只存放session的话就无法保存用户名等信息了
private static final Set<WebScoketTest> connections = new CopyOnWriteArraySet<>();
//用户名
private String userName;
//websocket连接,可以通过session向另一端传递信息
private Session session ;
/**
* 用来传递信息,当客户端向服务端发送信息的时候该方法会被调用
* author: wcy 2015年7月28日
* @param message
* @param session
* @throws IOException
* @throws InterruptedException
*/
@OnMessage
public void onMessage(String message, Session session) throws IOException, InterruptedException{
message = message.replaceAll("[\\n\\r]","<br/>" );
for(WebScoketTest client : connections){
synchronized (client) {
//向在连接池中的所有连接