1

シンプルなチャットアプリを作りました。データベースを使用しますが、クライアントが数秒ごとにデータベースにクエリを実行するため、これは効率的ではありません。とにかく、私は必要なことを達成しました。ポーリングやコメットのような良い方法があります。後で実装します。時間をかけてこれを読んでください。これにはほとんど問題がありません。1) 2 人のユーザー 100 と 101 を考えてみましょう。100 が 101 にメッセージを送信すると、ID が 100_101 として DB に保存されます。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){}
                }

簡単で有効なアイデアをいただければ幸いです。

4

0 に答える 0