我做了一个简单的聊天应用程序。它使用数据库,这效率不高,因为客户端每隔几秒查询一次数据库。无论如何,我实现了我所需要的,有很好的方法,比如 polling 和 commet,我稍后会实施。请花点时间阅读这篇文章,我对此有一些疑问。1)考虑两个用户 100 和 101,当 100 向 101 发送消息时,我将 id 作为 100_101 保存在数据库中 2)当 101 将消息发送回 100 时,它在数据库中保存为 101_100。3)我能够按顺序获取消息。
问题-
1) 用户应保持特定窗口打开。
我希望在有新消息时打开弹出窗口。如何实现。
2) 当用户 (100) 正在键入时,如果仅打开 100 的 101 聊天窗口,则用户 (101) 应该看到文本为“100 正在键入”。这不应该涉及任何数据库的东西。
我做过的工作。当用户(100)开始向服务器输入数据时,我可以将数据发送到服务器。如何发送数据,即如何向用户推送数据(101)。
我现在的代码如下。
阿贾克斯
$.ajax( {
type : "POST",
data : "uName=" + uName +"&opName=" + opName + "&msg=" + msg + "&colorCode="
+ colorCode,
url : "<%= path %>/chat/SaveChat",
error : function(xhr, ajaxOptions, thrownError) {
alert(xhr.status);
alert(thrownError);
},
success : function(data) {
// alert(data);
$("#chat-area").html(data);
document.getElementById('chat-area').scrollTop = document.getElementById('chat-area').scrollHeight;
}
});
小服务程序
try {
String newline = System.getProperty("line.separator");
String uName = req.getParameter("uName");
String opName= req.getParameter("opName");
String msg = req.getParameter("msg");
String colorCode = req.getParameter("colorCode");
DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
Date date = new Date();
String dat =dateFormat.format(date);
PreparedStatement ps = db.conn.prepareStatement("INSERT INTO chatmessage"
+ "(message,username,msgtime,colorselected) "
+ " VALUES(?,?,?,?)");
ps.setString(1,msg);
ps.setString(2,uName+"_"+opName);
ps.setString(3,dat);
ps.setString(4,colorCode);
ps.executeUpdate();
ps.close();
ps = db.conn.prepareStatement("select * from chatmessage where username=? or username=? order by id asc");
ps.setString(1,uName+"_"+opName);
ps.setString(2,opName+"_"+uName);
ResultSet rs=ps.executeQuery();
String temp[];
StringBuilder sb = new StringBuilder();
while(rs.next())
{
temp=rs.getString("username").split("_");
/* out.println(newline);
out.print(temp[0]+":");
out.print(rs.getString("message"));
out.println(newline);*/
sb.append("<span style='background:#"
+ rs.getString("colorselected") + "'>" + temp[0]
+ "</span>" + rs.getString("message") + "<br/><br/>");
}
db.conn.close();
out.print(replaceEmoticons(sb.toString()));
//out.print("success");
}
catch(Exception ce){
out.println("<font size='30' color='red'>Error Code 004</font>");
// RequestDispatcher rd = req.getRequestDispatcher("../status/error.jsp");
// rd.forward(req, res);
}finally{
try{
db.conn.close();
}catch(Exception e){}
}
感谢任何简单有效的想法。