欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【websocket】——用户登录实现广播

程序员文章站 2022-05-21 21:25:50
...

    咱们一般用的聊天软件都是先登录,然后会有一个提示谁上线的情况。其实这个操作是一个广播的过程。本文主要讲解利用websocket实现用户登录,并且简单的广播功能。

主要分为两大功能块

1、登录跳转

   这个过程和普通系统一样,jsp—》Servlet—》重定向(chat.jsp),如有不理解的直接看代码吧。

JSP

   //跳转到LoginServlet中
    <form action ="LoginServlet" method="get">
    	
    	name:<input name="username"/><br/>
    	<input type="submit"/>
    </form>
Servlet

@WebServlet("/LoginServlet")
public class LoginServlet extends HttpServlet
{
    private static final long serialVersionUID = 1L;

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException
    {
        //获取jsp中传递的username
        String username = request.getParameter("username");
        //用户名放到session中
        request.getSession().setAttribute("username", username);
        //重定向到chat.jsp页面中
        response.sendRedirect("chat.jsp");
    }
}

2、简单广播(输出到后台)

    何为广播?

       【websocket】——用户登录实现广播

    在用户登录成功,进入聊天界面的过程,打开socket,同时这个时候把用户名同时传递,后台将其打印,以此检验数据的是否成功传递。

不理解之处,直接看代码吧。

chat.jsp 打开ws通道

<script type="text/javascript"  src="jquery-1.4.4.min.js"></script>
	<script type="text/javascript">
	    //EL表达式,获取用户
		var username ='${sessionScope.username}';
		var ws;//一个ws对象就是一个通信管道
		//打开socket通信的同时将广播的信息一并传入
	    var target = "ws://localhost:8888/webchat/chatSocket?username="+username;
		window.onload = function(){
			//进入聊天界面页面,就打开socket通信
	  		if("WebSocket"in window){
	  			ws = new WebSocket(target);
	  		}else if("MozWebSocket" in window){
	  			ws = new MozWebSocket(target);
	  		}else{
	  			alert("WebSocket is not supported by this browser.");
	  			return;
	  		}
	  }
实现用户登录之后的广播

@ServerEndpoint("/chatSocket")
public class ChatSocket
{  
    @OnOpen
    public void open(Session session)
    {
        // 当前websocket的session对象,不是Servlet中的session
        String queryString = session.getQueryString();
        System.out.println(queryString);
}
    其实这样广播就算是基本完成了,广播就是把消息传递给所有人,真正的广播消息,把在session中获取的内容输出到页面就可以了。其实广播和群聊的是一样的,广播就是一人发送消息,其余人接收,而且群聊就是有来有往。

【总结】

    广播的本质就是打开通信管道后把消息放到session中传递到服务端,之后从服务端获取发送到所有人就可以了。学的越多,生活中神秘感就越少一些。努力吧,骚年。。