【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、简单广播(输出到后台)
何为广播?
在用户登录成功,进入聊天界面的过程,打开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中传递到服务端,之后从服务端获取发送到所有人就可以了。学的越多,生活中神秘感就越少一些。努力吧,骚年。。