基于TCP的簡易聊天室設計與實現(xiàn)
江蘇省揚州市邗江中等專業(yè)學校 湯研 江蘇揚州 225127 2021/2/28 13:49:33
(接上頁)聊天室的消息數(shù)據(jù)傳輸中,聊天室的客戶端會在較短的時間內進行重復性的對服務端進行HTTP請求,對是否有發(fā)送給自己的信息數(shù)據(jù)以及聊天字節(jié)進行問詢,一旦有,就能夠及時返回消息現(xiàn)實出來,如果沒有,就返回空白消息,以此保證聊天室信息傳輸?shù)膶崟r性。
第二,HTTP Long Polling 算法優(yōu)化保證技術。在聊天室的實際通信過程中,在聊天室發(fā)送了HTTP Request數(shù)據(jù)后,并不會立刻返回數(shù)據(jù),而是將聊天室的HTTP 請求控制在服務端,直至用戶有消息時,才放行HTTP Response數(shù)據(jù),實現(xiàn)對聊天室消息數(shù)據(jù)的實時處理,避免消息數(shù)據(jù)的不及時通信。
第三,TCP長連接技術;赥CP 的簡易聊天室也能夠通過TCP的長連接來保證聊天室數(shù)據(jù)傳輸?shù)膶崟r性,而其原理就是在聊天室運行的過程中,是客戶端系統(tǒng)能夠與服務器進行長時間的連接,一旦有消息到達,就能夠第一時間進行消息的傳輸,由服務端主動性推動通信消息到客戶端,以此實現(xiàn)聊天室的實時通信,避免服務端與客戶端之間消息傳輸?shù)难舆t[3]。
四、基于TCP的簡易聊天室設計與實現(xiàn)
基于TCP的簡易聊天室設計中,主要包含有聊天室前端和后臺兩個部分,在實際的聊天室設計與實現(xiàn)過程中,為了保證簡易聊天室能夠實現(xiàn)多人同時應用的實際需求,就必須對以下設計的要點內容加以思考:
首先,需要對服務的單進程或者多進程進行確認,不論是服務的單進程或是多進程,還是單機器或者多機器形式,都會的聊天室的設計產(chǎn)生直接性影響,不同的模式所需要的設計方案也存在較大差異。
其次,在進行多進程的聊天室架構設計時,就需要高度注重不同進程之間的通信協(xié)議問題,同設備不同進程之間的通信機制也包含了Unix管道、信號、共享存儲等等情況。
因此,在基于TCP的簡易聊天室的設計與實現(xiàn)中,就需要聊天室的前端設設計和后臺設計兩個部分著手:
首先,基于TCP的簡易聊天室前端設計。前端是運行于用戶設備窗口的聊天室網(wǎng)頁形似,是聊天室面向用戶的直觀體現(xiàn)。一般在進行聊天室的前端設計中,其核心技術包含了HTML、CSS、JavaScript等三種,實際設計中,HTML的主要作用是對聊天室的元素進行定義,CSS的主要能力則是進行元素定位,然后通過JavaScript實現(xiàn)聊天室的交互[4]。在基于TCP 的簡易聊天室設計實現(xiàn)中,為了充分保證聊天室運行的穩(wěn)定性和信息傳輸?shù)膶崟r性,就需要保證前端設計的穩(wěn)定性,其部分代碼設計如下:
﹤script﹥
var name = ws = ’’ ;
//執(zhí)行websock
function chat() {
var wsserver = ’ws://47.94.11.195:443’;
//調用WebSocket對象建立連接
//ws wss: // ip:port(字符串)
ws = new WebSocket(wsserver);
//獲取聊天內容展示窗口
var sayContent = document.getElementById(’sayContent’);
并且為了充分保證聊天室的執(zhí)行與監(jiān)督能力,還需要注重監(jiān)聽服務器數(shù)據(jù)的推送以來連接關閉控制,其代碼如下:
//onmessage監(jiān)聽服務器數(shù)據(jù)推送
ws.onmessage = function (v) {
var html = sayContent.innerHTML;
sayContent.innerHTML = html + "﹤br﹥"+v.data;
}
//監(jiān)聽連接關閉
ws.onclose = function (v) {
var html = sayContent.innerHTML;
sayContent.innerHTML = html + "﹤br﹥聊天室已關閉!";
其次,基于TCP的簡易聊天室后臺設計中,作為實現(xiàn)聊天室編輯與控制的功能性系統(tǒng),是保證聊天室運行穩(wěn)定和可靠的關鍵所在;赥CP 的簡易聊天室后天設計代碼如下:
﹤?php
$server = new swoole_websocket_server("0.0.0.0", 443);
$server-﹥users = [];
$server-﹥on(’open’, function (swoole_websocket_server $server, $request) {
$server-﹥(未完,下一頁)
|