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

首頁 > 開發 > JS > 正文

node實現socket鏈接與GPRS進行通信的方法

2024-05-06 16:51:07
字體:
來源:轉載
供稿:網友

業務背景

最近接到一個需求,在微信公眾號界面設計一個獨立界面,界面上有 A 電機進、A 電機退、B 電機進、B 電機退 4 個按鈕,點擊對應按鈕,云平臺發送不同的代碼給電機本地的控制器,控制電機執行不同的動作,電機本地控制器具備GPRS網絡功能。服務器與電機本地控制器(客戶端)采用 TCP 協議連接,客戶端發送心跳包給服務器保持長連接,客戶端每次收到服務器下發的代碼指令后作出回復主要的實現原理是前端訪問后臺的接口傳輸數據。后臺采用用socket與GPRS模塊進鏈接,暴露出一個IP+PORT給GPRS進行訪問即可,實現邏輯比較簡單。但是在開發中出現一下比較棘手問題,下面進行一一歸納。

技術棧

主要采用的技術棧前端部分采用vue和weUI,后臺采用node的koa框架,前端頁面是直接寫在koa里面,由于頁面比較簡單,所以沒有實現前后的分離。

實現過程

1、前端部分

node,socket,鏈接,GPRS,通信

前端部分實現主要是提供4個按鈕,向后臺接口請求對應的數據,例如:點擊A點擊前進,就向后臺請求http://XXXX:4000/djxt/move接口并傳輸數據,可以下載完整項目運行后,通過127.0.0.1:3002/djxt進行訪問,頁面html代碼主要部分如下:

 <div class="wrap">   <button @click="goA('A1')" class="weui-btn" v-bind:class="{ 'weui-btn_loading': btnStatus.cur == 'A1'&&btnStatus.status==0, 'weui-btn_primary': btnStatus.cur == 'A1'&&btnStatus.status==1, 'weui-btn_plain-primary': btnStatus.cur != 'A1' }">A 前進<i v-show="btnStatus.cur == 'A1'&&btnStatus.status==0" class="weui-loading"></i></button>   <button @click="backA('A0')" class="weui-btn" v-bind:class="{ 'weui-btn_loading': btnStatus.cur == 'A0'&&btnStatus.status==0, 'weui-btn_primary': btnStatus.cur == 'A0'&&btnStatus.status==1, 'weui-btn_plain-default': btnStatus.cur != 'A0' }">A 后退<i v-show="btnStatus.cur == 'A0'&&btnStatus.status==0" class="weui-loading"></i></button>   <button @click="goB('B1')" class="weui-btn" v-bind:class="{ 'weui-btn_loading': btnStatus.cur == 'B1'&&btnStatus.status==0, 'weui-btn_primary': btnStatus.cur == 'B1'&&btnStatus.status==1, 'weui-btn_plain-primary': btnStatus.cur != 'B1' }">B 前進<i v-show="btnStatus.cur == 'B1'&&btnStatus.status==0" class="weui-loading"></i></button>      <button @click="backB('B0')" class="weui-btn" v-bind:class="{ 'weui-btn_loading': btnStatus.cur == 'B0'&&btnStatus.status==0, 'weui-btn_primary': btnStatus.cur == 'B0'&&btnStatus.status==1, 'weui-btn_plain-default': btnStatus.cur != 'B0' }">B 后退<i v-show="btnStatus.cur == 'B0'&&btnStatus.status==0" class="weui-loading"></i></button>  </div>

發送數據給后臺部分代碼如下:

 // A 前進     goA (id){      axios.post('/djxt/move', { id })      .then( (response)=> {       console.log(response);       if( response.data.success ){        this.alertDialog.content = '操作成功';        this.alertDialog.status = true;       }else{        this.alertDialog.content = '操作失敗了';        this.alertDialog.status = true;       }      })      .catch( (error)=> {       console.log(error);        this.alertDialog.content = '操作失敗了';        this.alertDialog.status = true;      });     }

2、后臺實現

由于用的是node技術棧,當初使用的是scoket.io來進行scoket鏈接的,但是在后面的開發中發現該方法需要有一個事件去觸發提交數據,在客戶端也需要有事件進行監聽,不適合在與GPRS進行通信,最后無奈的放棄了。后面采用了node的NET模塊進行通信,該模塊只要調用write(data)就可以發送綁定端口的數據。相對比較簡單??梢詤⒖家幌耼odejs.org/dist/latest… 看不懂英文可以找中文版的。

net的連接可以寫在www文件或是app.js文件,看自己需求。在該項目中暴露出來接口127.0.0.1:3004,代碼如下:

//socketvar net = require('net');// 服務器IPvar HOST = '127.0.0.1';// 端口號var PORT = 3004;// 創建一個TCP服務器實例,調用listen函數開始監聽指定端口// 傳入net.createServer()的回調函數將作為”connection“事件的處理函數// 在每一個“connection”事件中,該回調函數接收到的socket對象是唯一的net.createServer(function(sock) {// 全局sock,可以在其他地方調用global.sock = sock// 獲得了一個socket連接,將客戶端輸出來console.log('CONNECTED: ' +  sock.remoteAddress + ':' + sock.remotePort);// 為這個socket實例添加一個"data"事件處理函數,接收客戶端數據sock.on('data', function(data) {  console.log('DATA ' + sock.remoteAddress + ': ' + data);  // 回發該數據,客戶端將收到來自服務端的數據,實現ECHO服務器  // sock.write('' + data );});// 為這個socket實例添加一個"close"事件處理函數sock.on('close', function(data) {  console.log('CLOSED: ' +    sock.remoteAddress + ' ' + sock.remotePort);});}).listen(PORT, HOST);

代碼中的HOST 是你需要暴露給GPRS模塊的ip,PORT是端口。net.createServer創建服務后,它回調里面的sock可以用來做一些監聽,例如客戶端返回數據sock.on('data', function(data) {})。在開發過程中遇到一個問題就是HOST在本地是用127.0.0.1是可以進行訪問的,但是到了云服務后,會出現端口訪問不了。解決辦法是把HOST改為你自己服務器的內網ip即可進行訪問。global.sock = sock這個主要是暴露全局的sock,可以在其他需要地方進行調用,切記要暴露出去。

服務端處理前端發送過來的數據,發送到GPRS模塊。該項目中前端訪問的路由為/move,進入這個路由后進行判斷,再把值轉發給GPRS,這里關鍵點是利用全局的Sock的sock.write()來發送到客戶端。代碼如下

//前端接口router.post('/move', async (ctx, next) => { let params = ctx.request.body;  // console.log('ctx.state: ', global.sock) // console.log('ctx.state2222: ', sock) console.log('前端接口: ', params) if( !sock ){  ctx.body = {   data: params,   success: false,   msg: 'socket不存在'  } }else{  sock.write( params.id );  ctx.body = {   data: params,   success: true,   msg: ''  } }})

完整的代碼可參考github。https://github.com/bayi-lzp/node_djxt_socket

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲精品一二区| 久久精品视频在线观看| 欧美激情免费在线| 91久久精品国产91久久| 亚洲一区二区在线播放| 国产精品高潮呻吟久久av黑人| 国产精品美女久久久免费| 永久免费毛片在线播放不卡| 亚洲精品一区二区网址| 亚洲网站在线播放| 色妞一区二区三区| 欧美日本国产在线| 欧美成人免费播放| 久久天天躁狠狠躁夜夜av| 欧美成人在线免费视频| 亚洲欧美日韩精品久久| 国产精品欧美亚洲777777| 亚洲欧洲一区二区三区久久| 国产精品丝袜久久久久久高清| 91tv亚洲精品香蕉国产一区7ujn| 亚洲影院污污.| 亚洲福利视频专区| 久久青草福利网站| 亚洲欧洲国产伦综合| 亚洲va男人天堂| 亚洲电影免费观看高清完整版| 久久精品国产一区二区三区| 欧美黑人一区二区三区| 国产日本欧美一区二区三区在线| 美女福利视频一区| 久久网福利资源网站| 国产美女高潮久久白浆| 精品女同一区二区三区在线播放| 欧美国产日产韩国视频| 在线观看精品自拍私拍| 成人免费黄色网| 91香蕉电影院| 欧美极品少妇xxxxⅹ免费视频| 欧美激情久久久久久| 97国产一区二区精品久久呦| 亚洲精品98久久久久久中文字幕| 欧美在线观看日本一区| 成人羞羞国产免费| 欧美大片免费观看| 欧美国产亚洲精品久久久8v| 最近中文字幕2019免费| 欧美日韩国产成人在线| 欧美一区深夜视频| 欧美一级免费看| 91免费国产视频| 国产精品91在线观看| 精品久久久在线观看| 韩国精品久久久999| 国产精品情侣自拍| 欧洲亚洲免费视频| 国产精品福利网站| 久久精品色欧美aⅴ一区二区| 国产免费亚洲高清| 欧美黑人巨大精品一区二区| 色综合久久久888| 欧美孕妇孕交黑巨大网站| 欧美激情精品久久久久久免费印度| 欧美激情网站在线观看| 欧美日韩xxxxx| 成人av在线网址| 久久久久久久久久久91| 色哟哟网站入口亚洲精品| 全球成人中文在线| 精品调教chinesegay| 久久精品国产欧美激情| 黑人精品xxx一区| 成年人精品视频| 色老头一区二区三区在线观看| 欧洲成人在线观看| 日韩免费看的电影电视剧大全| 欧美丰满少妇xxxx| 国产精品极品在线| 日本精品在线视频| 亚洲国产欧美在线成人app| 国产欧美 在线欧美| 亚洲国产免费av| 国产精品爽黄69天堂a| 欧美午夜性色大片在线观看| 亚洲国产高潮在线观看| 亚洲天堂av高清| 亚洲一区二区三区四区视频| 亚洲国产精品久久久久秋霞不卡| 九九热r在线视频精品| 亚洲tv在线观看| 亚洲最大的网站| 久久躁狠狠躁夜夜爽| 欧美体内谢she精2性欧美| 欧美日韩一区免费| 国产精品免费久久久久久| 欧美日韩一区二区在线播放| 欧美成人性色生活仑片| 日韩av快播网址| 国产ts人妖一区二区三区| 久久青草精品视频免费观看| 国产在线观看精品一区二区三区| 超碰日本道色综合久久综合| 欧美午夜女人视频在线| 久久精品人人做人人爽| 永久555www成人免费| 亚洲精品自产拍| 中文字幕最新精品| 欧美裸体xxxxx| 羞羞色国产精品| 国产xxx69麻豆国语对白| 国产精品老女人精品视频| 欧美成人小视频| 91丝袜美腿美女视频网站| 国产成人jvid在线播放| 日韩高清电影好看的电视剧电影| 久99九色视频在线观看| 精品久久久久久久久久ntr影视| 国产精品av网站| 奇米影视亚洲狠狠色| 国产精品美女久久久免费| 欧美午夜影院在线视频| 91黑丝在线观看| 久久精品视频一| 91国产高清在线| 色综合伊人色综合网| 国产91在线播放| 午夜精品久久久久久久男人的天堂| 亚洲精品小视频| 国产精品欧美激情| 国内精品久久久久久影视8| 清纯唯美日韩制服另类| 中文字幕日韩欧美在线| 免费91麻豆精品国产自产在线观看| 日韩视频免费大全中文字幕| 亚洲第一视频在线观看| 精品美女久久久久久免费| 亚洲剧情一区二区| 国产精品日韩欧美| 精品国产老师黑色丝袜高跟鞋| 国产精品爽黄69| 91色视频在线观看| 中国人与牲禽动交精品| 疯狂做受xxxx欧美肥白少妇| 国产精品美女网站| 成人免费福利在线| 日韩激情片免费| 欧美久久精品午夜青青大伊人| 色噜噜国产精品视频一区二区| 91亚洲精品一区二区| 亚洲人成五月天| 俺也去精品视频在线观看| 亚洲3p在线观看| 欧美日韩一区二区在线| 国产精品激情av在线播放| 亚洲精品第一页| 日韩电影大全免费观看2023年上| 欧美性猛交xxxx乱大交| 日韩在线视频线视频免费网站| 亚洲二区中文字幕| 4444欧美成人kkkk| 日韩在线播放一区| 在线视频欧美日韩精品| 成人中文字幕在线观看| 久久久久久网站| 日韩精品中文字幕视频在线|