999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

WebSocket 與Node.js 結合實現公交系統實時位置查詢

2019-06-15 08:41:46
四川職業技術學院學報 2019年2期
關鍵詞:頁面方向

錢 立

(四川職業技術學院,四川 遂寧 629000)

1 引言

伴隨著智能手機的全面普及,人們在衣食住行各方面依賴手機查詢各種有用信息[1]。無車上班族每天出行幾乎都依賴城市公交系統,這類人會習慣性查詢實時公交信息。公交實時位置查詢帶來兩大好處,一是節省乘客等待時間,基本上可以比較“準時”地趕上車,一定程度上減少各站臺乘客擁擠狀態,二是社會心理學方面,可緩解乘客等待時的焦慮,增加社會和諧度。

2 公交實時位置功能分析

公交系統實時位置查詢功能雖說簡單但又有并發響應難度。簡單即是說任何一個乘客進入公交系統查詢頁面,選擇將要乘坐的公交路數和往返方向,比如203 路(從育才西路到四川職業技術學院方向),那么在查詢結果展示頁面上將顯示出這個線路上全部站臺多個車輛的運行和到站實時情況。查詢僅需提供兩個參數,一個是公交路數,另一個是往或返的方向。

有難度即是說對于一個中大型城市,公交系統往往有幾十路或上百路公交車,每一路公交分往返兩個方向,每一路公交的站臺一般有十多個,高峰上下班期間假定平均每個站臺有15 名乘客,其中有10 名乘客會使用公交實時位置查詢。那么這個公交查詢系統高峰期間每秒種可能提供的查詢請求數萬次左右,所以該系統應當有較高的請求并發性,能及時響應。

3 相關技術介紹

乘客查詢公交實時位置都會使用Http 方式連接到服務器,以往使用技術Long POLLing 等輪詢方式來實現實時,但這種技術浪費大量網絡、服務器資源和等待時間,不是最好解決方案。在HTML5 技術不斷推陳出新后,使用WebSocket 可提供更加高效的實時數據交互。

WebSocket 是HTML5 提供的一種在單個TCP連接上進行全雙工通訊的協議[2]。可以看做是Http 協議的一個升級,使得在服務器和瀏覽器之間能進行雙向交流,只要連接創建后服務器就可以實時推送消息給瀏覽器,這是一個重要的改變。主要API 有:連接建立時觸發open 事件,onopen()進行處理;客戶端接收服務端數據時觸發message 事件,onmessage()進行處理;使用send()發送數據,close()關閉連接。[3-4]

通過分析知道查詢系統需要能及時響應高并發請求,現階段Node.js 技術用來做高并發是一種很好的選擇。Node.js 是一個基于Chrome V8引擎的JavaScript 運行環境。Node.js 使用了一個事件驅動、非阻塞式I/O 的模型,使其輕量又高效。Node.js 適合運用在高并發、I/O 密集、少量業務邏輯的場景。[5]

PC 和手機上的現代瀏覽器都支持WebSocket技術,Node.js 為了能支持WebSocket 需要第三方軟件支持包(這類軟件包很多,本文選用ws)。ws 是應用于Node.js 下的實現了Web-Socket 功能的一個軟件包,它簡單快速,集成了客戶端和服務端測試能力。ws 有兩個主要類WebSocket.Server 和WebSocket[5]。WebSocket.Server 主要事件是connection 事件,與Html5 的WebSocket API 類似。

4 設計思路及數據格式設計

對于公交系統實時位置查詢,本文僅考慮瀏覽器發出查詢請求,服務器查詢得到實時位置數據推送給瀏覽器這兩個過程,不考慮各路公交GPS 位置的收集、發送給服務器判斷位置及存儲等其余過程。

先考慮一路公交車往返兩個方向的查詢及顯示,多路公交同樣處理。Node.js 結合Express做頁面查詢busInfo.htm,并且設計一個Query-Server.js 提供服務端查詢服務。QueryServer.js 需引用ws 模塊以便Node.js 支持WebSocket。

以站臺為基準來設計數據格式,將某路公交線路上的站臺依次編號1、2、……、n,各編號有站臺名稱,來車狀態兩種(0:表示未到,1:表示到站)。考慮數據精簡,選擇JSON 格式,實例公交203 路車從育才西路到四川職業技術學院方向數據表示如下:

{"RouteID":203,//公交車路數

"GoBack":0,//0:往方向1:返方向

"stations":[

{"xuhao":1,"status":0, "name":" 育才西路"},

{"xuhao":0,"status":1, "name":" 育才西路出"},

{"xuhao":2,"status":0, "name":" 育才路口"},

……,

{"xuhao":13,"status":1,"name":" 環島商務中心"},

{"xuhao":0,"status":0,"name":" 環島商務中心出"},

{"xuhao":14,"status":0,"name":" 四川職業技術學院"}]}

含義描述:RouteID 表示公交路數;GoBack表示往返;stations 表示站臺,是一個JSON 數組。數組中每個站臺有三個屬性,xuhao 表示站臺序號(xuhao 為0 表示某兩個站臺之間),name 表示站臺名,status 為1 表示對應站臺序號有車,為0 表示無車。現在站臺的情況是:在育才西路與育才路口之間的途中有車,在環島商務中心有車到站。

5 開發實現

5.1 服務器端QueryServer.js

const WebSocket = require(’ws’);

const wss = new WebSocket.Server ({port:8010});

wss.on (’connection’,function connection(ws,req){

// 根據req.url 中車次routeID 和往返方向0 查詢

var busRouteInfo=getBusRouteInfo(routeID,0);

ws.on (’message’, function incoming(message){

ws.send(busRouteInfo);

});

var tm = setInterval(function(){

try { busRouteInfo=getBusRouteInfo(routeID,0);

ws.send(busRouteInfo);

}catch(e){

consol e.log("出錯,清除定時器"+e);

clear Interval(t m);

}},5000);//每隔5 秒鐘發送一次更新});

console.log (’ 服務器運行,綁定在端口8010’);

其中getBusRouteInfo(routeID,0)這個方法(需依據后臺數據庫單獨設計)根據提供的公交路數和往返方向參數從數據庫查詢到數據后以JS O N 格式返回。服務器端設置了一個定時器,每隔5 秒鐘就重新查詢更新公交位置信息。

5.2 客戶端busInfo.htm

//打開一個WebSocket

var ws = new WebSocket ("ws://192.168.1.1:8010/RouteNo="

+checi.value+"&goback=0");

ws.onopen = function(){

ws.send (" 請查詢"+checi.value+" 路公交車");

};

wws.onmessage = function (evt) {

var busRouteInfo = evt.data;

jsonRoute = JSON.parse(busRouteInfo);// 先刪除所有子節點

while(myRoute.hasChildNodes()){

myRoute.removeChild (myRoute.firstChild);

}

busStartEnd.innerText = "";

var number = jsonRoute.stations.length;

myLine.style.height = number*40+’px’;

var len = jsonRoute.stations.length;

busStartEnd.innerText = " 公交"

+checi.value+" 路,始發站:

+jsonRoute.stations [0].name+"---〉終點站:"

+jsonRoute.stations[len-1].name;

for(var i in jsonRoute.stations){

var tmpDiv = document.createElement(’div’);

var tmpImg = document.createElement(’img’);

var tmpSpan = document.createElement(’span’);

if (jsonRoute.stations [i].status == 0){

tmpImg.src=’Images/kong.png’;

}else{ tmpImg.src=’Images/bus.png’; }

if (i%2==1){tmpSpan.innerText = "-- 途中";

}else{

tmpSpan.innerText =

jsonRoute.stations[i].xuhao+

" "+jsonRoute.stations[i].name;

}

tmpDiv.append(tmpImg);

tmpDiv.append(tmpSpan);

myRoute.append(tmpDiv);

}//end for

};//end onmessage()

圖1 公交203 路實時運行情況

瀏覽器端使用WebSocket 方式先創建與服務器的鏈接,當服務器推送消息來時,取出該消息解析為JS O N 格式,然后依次創建相應的頁面元素顯示,運行效果如上圖1。

6 總結

智慧城市為了實現其智慧功能要求城市公交提供更優的服務。城市公交實時位置查詢是無車上班族出行的一個重要需求。本文分析了公交實時位置查詢系統應具備高并發處理能力,采用Node.js 結合Express 實現Web 頁面瀏覽查詢,在Web 頁面使用HTML5 的WebSocket 技術,服務器端使用ws 組件提供WebSocket 支持與之結合,實現了服務器端更高效的實時推送位置信息。HTML5 的WebSocket 技術和Node.js 結合使得實現公交系統實時位置查詢變得更加簡潔高效。

猜你喜歡
頁面方向
微信群聊總是找不到,打開這個開關就好了
大狗熊在睡覺
刷新生活的頁面
保健醫苑(2022年1期)2022-08-30 08:39:14
2022年組稿方向
計算機應用(2022年2期)2022-03-01 12:33:42
2022年組稿方向
計算機應用(2022年1期)2022-02-26 06:57:42
2021年組稿方向
計算機應用(2021年4期)2021-04-20 14:06:36
2021年組稿方向
計算機應用(2021年3期)2021-03-18 13:44:48
2021年組稿方向
計算機應用(2021年1期)2021-01-21 03:22:38
位置與方向
同一Word文檔 縱橫頁面并存
主站蜘蛛池模板: 国产麻豆福利av在线播放| 91精品日韩人妻无码久久| 911亚洲精品| 无码网站免费观看| 日韩精品少妇无码受不了| 永久成人无码激情视频免费| 福利在线免费视频| 国产美女自慰在线观看| 特级欧美视频aaaaaa| 国产精品免费电影| 国产一级α片| 九九香蕉视频| 久久免费视频6| 国产黄网站在线观看| 老司机久久精品视频| 欧美有码在线| 免费毛片在线| 免费福利视频网站| 亚洲人成人伊人成综合网无码| 青青草原国产av福利网站| 日韩国产精品无码一区二区三区| 一级爆乳无码av| 国产成人高清在线精品| 九色视频一区| 无码国产伊人| 久久精品人人做人人爽| 亚洲成年人片| 波多野结衣视频网站| www.亚洲国产| 欧洲成人免费视频| 国产成人亚洲精品色欲AV| 国产乱码精品一区二区三区中文 | 亚洲一级毛片| 激情六月丁香婷婷四房播| 毛片免费网址| 欧美日韩国产精品va| 青青草原国产免费av观看| 国产成人久久777777| 亚洲αv毛片| 国产大片喷水在线在线视频| 永久成人无码激情视频免费| 亚洲不卡网| 毛片免费在线视频| 激情综合婷婷丁香五月尤物| av一区二区无码在线| 一级毛片无毒不卡直接观看| 国产精品美女在线| 免费黄色国产视频| 亚洲三级色| 美女视频黄频a免费高清不卡| 国产91精品调教在线播放| 99热最新网址| 天天躁夜夜躁狠狠躁躁88| 精品国产中文一级毛片在线看 | 亚洲黄色片免费看| 欧美午夜视频在线| 国产美女无遮挡免费视频| 成色7777精品在线| 精品视频第一页| 欧美成人第一页| 亚洲视频在线青青| 91极品美女高潮叫床在线观看| 在线播放精品一区二区啪视频| 午夜日b视频| 看看一级毛片| 国产区免费精品视频| 毛片免费在线| 在线免费看片a| 中字无码av在线电影| 亚洲日本一本dvd高清| 99久久精品国产麻豆婷婷| 免费人成黄页在线观看国产| 国产麻豆另类AV| 2021国产精品自拍| 青草国产在线视频| 四虎AV麻豆| 久久亚洲精少妇毛片午夜无码| 国产高清不卡| 国产va视频| 国产成人h在线观看网站站| 手机看片1024久久精品你懂的| 亚洲香蕉伊综合在人在线|