聊天室開發詳解 四

2021-12-29 23:05:36 字數 1630 閱讀 6352

最後,我們把上面編寫的程式上傳到**空間,在客戶端用瀏覽器開啟時,我們見到了平常聊天室一樣的使用者登陸介面。我們於是輸入使用者名稱及密碼,按傳送時,我們所輸入的資料便會暗中存入使用者資料庫中。接著便出現了發言筐,我們試著輸入一句話,點發言按鈕,這時,我們的發言便會帶著我們所輸入的話,我們所選擇的說話物件,我們所選擇的顏色以及表情寫入發言資料庫中。但是,發言之後,我們並沒有發現任何語句出現在螢幕上,那是因為:這個程式本身負責的純粹是把資料庫寫入資料庫,他不會向客戶端返回任何東西,除非你的輸入是錯誤的。

聊天室還需要乙個重要的程式,這個程式自動的、不斷的讀取資料庫中最新的記錄,把他顯示在所有使用者的瀏覽器上。這個程式與別的任何程式沒有任何關係,他的唯一的任務是讀取發言資料庫中的資料,把他顯示出來,他不管客戶是否輸入發言,不管客戶對誰說話,不管客戶選擇什麼表情與顏色。當這個聊天室即使沒有乙個人說話,這個程式也是不斷的讀取這個資料庫,每n秒鐘重新整理一次,這個n是由程式設計者決定的。

由此,我們可知:登陸_發言部分與自動重新整理部分是沒有任何聯絡的。

在分析範例程式之前,我們最好來分析一下幾點:

1、在我們往資料庫中寫入資料庫時,記錄是不斷往資料表的尾部增加的,因此,我們必須知道哪一句話是最新的,哪一句話在前面說的,我們知道,在msaccess(小型**之最愛)資料庫表中,有乙個自動編號的字段id,這個字段非常有用,id最大的記錄是最新輸入的記錄,每新增乙個記錄,id自動加1,由此,我們可通過id來對使用者的話進行從新到舊的、一句一句的排序輸出。我們知道,在 sql 的select 語中有乙個 order by的子句,他按一列或多列對結果進行公升序或降序排序。如果我們不用order by 字句,那select 預設為公升序輸出,那我們會看到,最舊的發言總是在前面顯示,而最新的語句則跑到最後面去,那當然不是我們所希望的。

2、再一點,那就是使用者不斷的往資料庫中輸入語句,資料庫將會變得越來越大,而我們為了速度,我們不能也不必要讀取全部的記錄把所有的話顯示出來,我們只需要看到最新的n句話比如最新的50句話就夠了。如何實現上面兩點,且來看看範例程式:

我們來分析一下下面的程式:chatview.asp

設定快取為真

set conn=server.createobject("adodb.connection")

connstr="dbq="+server.mappath("chat.mdb")+";driver=;"

conn.open connstr

%>

sql="select * from 聊天表 order by id desc"        降序輸出查詢結果    

set rootrs=conn.execute(sql)

set name=rootrs("姓名")                  從資料庫中獲取姓名、說話、顏色、表情等

set word=rootrs("說話")

set colo=rootrs("顏色")

set face=rootrs("表情")

set who=rootrs("說話物件")

%>

定義輸出記錄數 i

顯示50句話,包括姓名、話語、顏色、表情等

說:

>

loop%>

每四秒鐘重新整理一次

請把此程式存為chatview.asp

技術交流 永無止境

聊天室開發心得

這是最開始的乙個架構圖 客戶端維護兩個鏈結,乙個是與閘道器的長鏈,用於接收下推的訊息和事件 乙個是與聊天室伺服器的短鏈 其實是經過了 lvs 的負載均衡 dr 用於發言 點讚 加入和退出聊天室。chatroom server 在收到使用者加入的請求後,將使用者資訊儲存在 redis 中。redis ...

mysql 聊天室 聊天室php mysql 六

聊天室php mysql 六 相應的 資料庫 phpmyadmin mysql dump 主機 localhost 3306 資料庫 study28 資料表的結構 chat user create table chat user userid varchar 20 not null,passwd v...

案例 udp聊天室(四)

報一下環境 win10 pycharm python3.7 mnetassist import socket def send msg udp socket udp sockrt 形參 傳送訊息 dest ip input 請輸入對方的ip dest port int input 請輸入對方的por...