亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

聊天室自做 Follow Me

2019-11-18 20:35:09
字體:
來源:轉載
供稿:網友
    上網而沒去過聊天室的人,可謂是鳳毛麟角,下面,我們就自己來做個最簡單的聊天室。
  目前聊天室顯示對話的方式一般有兩種。一是每隔 x 秒就把整個對話顯示區刷新一遍,此方的弊端顯而易見:數據傳輸量大且屏幕有閃爍感;其二是有新的發言時,才將該內容傳遞給客戶端,并添加在原有對話的尾部,此法數據傳輸量就比較小且屏幕是平滑滾動,視覺效果好。第一種方法的實現已經有很多資料介紹,因此本文將介紹第二種刷新方式。
  設計思路:
  ⑴服務器端只保留最新的30條發言作為緩沖區,新的發言內容將最舊的發言擠出。
 ?、泼烤浒l言都分配一個遞增的序號??蛻舳俗詈蟪霈F的發言的序號記錄在 session 中。
 ?、抢秒[藏框架進行刷新,刷新時,將 Session 值與緩沖區的每句發言的序號進行比較,如果序號大于 Session 值說明該發言是新的,就將該發言的數據取出,并將該發言的序號值賦給 Session。
  ⑷對話顯示區使用 document.open() 打開后,就不再關閉,當隱藏框架刷新時有新數據取出并傳到客戶端時,將這些原始數據格式化為要顯示的內容(此工作可以在服務器端執行,但為減輕服務器的負擔,就將對話的合成工作移交給客戶),然后調用 document.writeln 方法將發言的內容寫到對話顯示區的尾部。
 ?、稍趯υ掞@示區中放置一段自動滾屏的代碼,使屏幕自動向下滾動,并可通過發言區的復選框來選擇是否自動滾屏。
  實現方法:
  一、本程序只需要 4 個文件即可實現:
 ?、與hat.asp:聊天室框架文件,負責初始化程序運行環境并隨機分配四位數的數字做為用戶名,再把頁面從上到下分成四部分,頂、底兩個框架高度為 0。
 ?、芻hatfyq.htm:發言區,提供輸入姓名、發言的文本框,及一個發言按鈕和一個自動滾屏的開關(復選框),并定義在客戶端執行的 javaScript:checksays()(對發言進行有效性檢測)、cls()(清空對話顯示區的內容)、write()(初始化對話顯示區,定義頁面顏色、文字大小,并放置滾屏代碼)、sw(username)(在對話區點擊人名時,將人名寫到發言框中)、w(un,sa,tn,dt)(將原始數據合成為完整的發言內容,并添加到對話顯示區的尾部)。
 ?、莄hatt.asp:此文件位于頂部的隱藏框架(高度為 0)中定時刷新,把新的發言的原始數據使用 <script Language=Javascript>parent.f2.w("姓名","發言內容","原始姓名","發言時間")</script> 的格式輸出到客戶端,即可調用 chatfyq.htm 中定義的 w(un,sa,tn,dt) 函數來顯示出發言內容。
 ?、萩hatsay.asp:發言提交到此文件進行處理。此文件位于底部的隱藏框架中。將發言加入緩沖區后,立即執行和 chatt.asp 相同的代碼段,將發言顯示出來。(chatsay.asp 后面的代碼和 chatt.asp 是相同的,之所以不在 chatsay.asp 后面使用 Response.Redirect "chatt.asp" 來調用,是為了加快速度,因為重定向方式需要建立兩次連接:發言提交是連接一次,重定向時又要再連接一次,效率低。)
  二、部分關鍵代碼注釋:
 ?、懦跏蓟a段:application("chat_hh") 緩沖區中最后一句發言的序號、Session("chat_hh") 就是“設計思路⑶”中提到的 Session 值,用于記錄客戶端已顯示的最后一句發言的序號:


'如果該序號為空,表明程序未初始化
If Application("chat_hh") = "" Then
  '定義緩沖區數組,共 30 句發言
  '每句發言占用 5 個位置:序號、姓名、發言內容、原始姓名、發言時間
  Dim sd(150)
  Application.Lock
  '將數組賦值給 Application("chat_sd"),即:發言只保留在服務器內存中
  Application("chat_sd") = sd
  '定義初始序號為 0
  Application("chat_hh") = 0
  Application.UnLock
End If
'為避免序號過大,每當序號增大到 65535 時就將序號復位為 0
If Application("chat_hh") > 65535 Then
  Application.Lock
  Application("chat_hh") = 0
  Application.UnLock
End If
'客戶端用來記錄已經顯示到哪句發言的 Session("chat_hh")
'其值等于序號減去 12,即:新來的用戶可以看到原有的 12 句發言
Session("chat_hh") = Application("chat_hh") - 12


 ?、芻hatfyq.htm 中的 JavaScript 函數:write():


function write(){
  //使用 document.open() 打開對話顯示區,打開后不關閉,這樣就可以不斷向里面添加新內容
  parent.f1.document.open();
  //向對話顯示區中寫入 HTML 文件頭
  parent.f1.document.writeln("<html><head><title>對話區</title><meta http-equiv=Content-Type content=/"text/html; charset=gb2312/">");
  //寫入樣式表定義
  parent.f1.document.writeln("<style type=text/CSS>.t{color:AAAAAA;font-size:9pt;}body{font-family:/"宋體/";font-size:10.5pt;line-height:160%}A{text-decoration:none}A:Hover{text-decoration:underline}A:visited{color:blue}</style></head></Script Language=/"JavaScript1.1/">");
  //寫入自動滾屏代碼
  //......(注意:此處省略的代碼請參見完整的源程序)
  parent.f1.document.writeln("StartUp();<//script>");
  parent.f1.document.writeln("<body bgcolor=CDE0FC text=000000>");
  parent.f1.document.writeln("<hr size=1>【歡迎光臨】紅蜻蜓聊天室恭候您的光臨。<hr size=1>");
  //將 chatt.asp 載入框架頂端的隱藏框架中,執行定時刷新功能
  parent.t.location.href="chatt.asp";
}


 ?、莄hatt.asp 定時刷新,并取得最新的發言的代碼:


'將聊天室的對話內容的緩存取到 sd 數組中
sd = Application("chat_sd")
'取得最后顯示的發言的序號
userhh = Session("chat_hh")
'定義 show 數組,用于存放要顯示的發言內容
Dim show()
ReDim PReserve show(0)
j = 1
newuserhh = 0
'遍歷緩沖區的發言內容
For i = 1 To 150 Step 5
  newuserhh = sd(i)
  '如果 sd(i)(每句發言的序號)大于用戶端最后發言的序號且發言存在就將其存入 show 數組
  If sd(i) > userhh And sd(i) > 0 Then
    ReDim Preserve show(j), show(j + 1), show(j + 2), show(j + 3)
    show(j) = sd(i + 1)
    show(j + 1) = sd(i + 2)
    show(j + 2) = sd(i + 3)
    show(j + 3) = sd(i + 4)
    j = j + 4
  End If
Next
'輸出 javascript 到客戶端
Response.Write "<script Language=JavaScript>"
'輸出 show 數組的內容
For i = 1 To UBound(show) Step 4
  '輸出 parent.f2.w(show(i),show(i+1),show(i+2),show(i+3)),調用客戶端 chatfyq.htm 的 w(un,sa,tn,dt) 函數來顯示發言內容
  Response.Write "parent.f2.w(" & Chr(34) & show(i) & Chr(34) & "," & Chr(34) & show(i + 1) & Chr(34) & "," & Chr(34) & show(i + 2) & Chr(34) & "," & Chr(34) & show(i + 3) & Chr(34) & ");" & Chr(13) & Chr(10)
Next
'寫出定時刷新的代碼,使 chatt.asp 在 5000 毫秒(5秒)后進行刷新
Response.Write "setTimeout('this.location.reload()',5000);</script>"
'如果緩沖區最后一句發言的序號大于原來客戶端最后一句發言的序號,就將該序號賦值給這個 Session("chat_hh"),以便下次刷新時進行新的檢測,避免把相同的發言多次取出
If newuserhh > userhh Then Session("chat_hh") = newuserhh


 ?、萩hatsay.asp 部分代碼注釋:


'如果發言長度超過 200 個字,就截斷超出部分
If Len(says) > 200 Then says = Left(says, 200)
'將發言進行編碼,使其不支持 HTML 語法
says = Server.HTMLEncode(says)
'使發言能在客戶端以 JavaScript 函數進行傳遞
says = Replace(says, "/", "//")
says = Replace(says, "/", "//")
says = Replace(says, Chr(34), "/" & Chr(34))
Application.Lock
  '讀出緩沖區的內容到 sd 中
  sd = Application("chat_sd")
  '取出當前緩沖區最后一句發言的序號
  hh = Application("chat_hh")
  '使這個序號遞增
  Application("chat_hh") = hh + 1
  Dim newsd(150)
  j = 1
  '將原緩沖區的最舊的一句發言去掉
  For i = 6 To 150 Step 5
    newsd(j) = sd(i)
    newsd(j + 1) = sd(i + 1)
    newsd(j + 2) = sd(i + 2)
    newsd(j + 3) = sd(i + 3)
    newsd(j + 4) = sd(i + 4)
    j = j + 5
  Next
  '將這次發言的內容添加到最后
  newsd(146) = hh + 1
  newsd(147) = un
  newsd(148) = says
  newsd(149) = username
  newsd(150) = sj
  '把新的發言內容放到緩沖區中
  Application("chat_sd") = newsd
  sd = newsd
Application.UnLock



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲国产精品电影在线观看| 91免费在线视频网站| 国产视频精品一区二区三区| 国产成人激情视频| 欧美日韩精品国产| 福利精品视频在线| 亚洲国产精品久久久久秋霞不卡| 久久国产色av| 久久久久久久影视| 久久久999精品免费| 深夜福利亚洲导航| 2024亚洲男人天堂| 日韩一中文字幕| 亚洲在线免费观看| 国产精品成人一区二区三区吃奶| 亚洲理论在线a中文字幕| 97国产suv精品一区二区62| 国产成人精品999| 黑人巨大精品欧美一区二区一视频| 91精品久久久久久久久| 国产精品久久久久久久久久久久久| 国产精品流白浆视频| 国产专区精品视频| 国内精品视频久久| 久久人人看视频| 2024亚洲男人天堂| 91情侣偷在线精品国产| 日韩av最新在线| 久久久久999| 伊人av综合网| www.久久久久| 日韩美女视频免费在线观看| 亚洲性线免费观看视频成熟| 中文字幕欧美在线| 日韩风俗一区 二区| 久久久久国产精品一区| 欧美视频在线观看 亚洲欧| 欧美日韩亚洲视频| 一区二区三区视频免费| 中文字幕成人在线| 国产一区二区三区高清在线观看| 国产精品久久久久不卡| 国产裸体写真av一区二区| 欧美精品国产精品日韩精品| 日韩大陆欧美高清视频区| 欧美成年人网站| 亚洲91av视频| 日韩精品中文字幕在线| 国产mv免费观看入口亚洲| 一区二区在线视频| 亚洲第一网站免费视频| 成人午夜一级二级三级| 国产日韩在线观看av| 日本韩国欧美精品大片卡二| 国产精品成人av性教育| 久久艹在线视频| 欧美极品美女视频网站在线观看免费| 91中文字幕在线| 欧美黄色片在线观看| 欧美精品手机在线| 日韩欧美在线第一页| 91久久国产精品91久久性色| 日韩精品中文字幕在线观看| 欧美尺度大的性做爰视频| 欧美黑人巨大精品一区二区| 久久91亚洲人成电影网站| 日产精品99久久久久久| 黄色成人在线免费| 国产福利精品视频| 国产精品扒开腿做爽爽爽男男| 在线播放日韩专区| 91精品国产综合久久久久久蜜臀| 日韩电影网在线| 精品视频在线观看日韩| 欧美—级高清免费播放| 欧美日韩亚洲网| 国产精品久久久久久婷婷天堂| 久久久精品免费| 久久影院免费观看| 国产日韩在线看| 国产精品美女www爽爽爽视频| 久久精品成人动漫| 狠狠躁18三区二区一区| 久久99久久亚洲国产| 97视频com| 5566日本婷婷色中文字幕97| 日韩av在线不卡| 欧美性视频在线| 亚洲欧美日韩国产精品| 国产精品96久久久久久| 国a精品视频大全| 日韩欧美在线视频日韩欧美在线视频| 久久精品国产久精国产一老狼| 国产综合福利在线| 国产精品久久久久久久久久久久久| 欧美乱妇40p| 亚洲欧美另类在线观看| 亚洲成人精品久久久| 欧美日韩在线免费| 色爱av美腿丝袜综合粉嫩av| 欧美日韩国产综合新一区| 在线激情影院一区| 91精品国产91久久久久久吃药| 欧美日韩亚洲高清| 日韩中文字幕网| 91精品国产色综合久久不卡98| 精品久久久久久亚洲精品| 亚洲第一区在线观看| 精品少妇一区二区30p| 日韩国产一区三区| 91免费高清视频| 一区二区三区美女xx视频| 日韩精品在线视频| 中文字幕精品久久久久| 国产精品视频xxx| 亚洲影视九九影院在线观看| 3344国产精品免费看| 在线观看欧美日韩国产| 亚洲国产精品成人精品| 亚洲人成绝费网站色www| 国产欧美精品久久久| 亚洲社区在线观看| 欧美有码在线观看视频| 91精品久久久久久久久久久久久| 九色精品免费永久在线| 亚洲综合成人婷婷小说| 一色桃子一区二区| 欧美孕妇性xx| 日韩大片免费观看视频播放| 51视频国产精品一区二区| 亚洲欧洲一区二区三区久久| 国产高清视频一区三区| 亚洲成人在线视频播放| 精品福利视频导航| 国产精品久久视频| 国产91精品黑色丝袜高跟鞋| 黑人巨大精品欧美一区二区一视频| 国产精品99久久99久久久二8| 亚洲加勒比久久88色综合| 狠狠躁夜夜躁久久躁别揉| 欧美日韩成人精品| 亚洲欧美制服另类日韩| 亚洲欧美激情精品一区二区| 国产小视频国产精品| 欧美午夜www高清视频| 日韩在线免费av| 亚洲欧美日韩精品久久| 91天堂在线视频| 91香蕉嫩草神马影院在线观看| 国产欧美精品久久久| 欧美激情在线有限公司| 久久久国产精彩视频美女艺术照福利| 久久欧美在线电影| 亚洲午夜精品久久久久久性色| 日韩欧美国产中文字幕| 国产亚洲精品激情久久| 久久九九精品99国产精品| 日本欧美精品在线| 亚洲一区二区久久久| 欧美伦理91i| 成年人精品视频| 亚洲免费中文字幕| 亚洲小视频在线| 亚洲一区二区久久久久久久|