精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

遙控你的電腦:通過Node.js和Socket.io實現(xiàn)手機(jī)的遠(yuǎn)程控制

移動開發(fā)
用手機(jī)來實現(xiàn)遠(yuǎn)程控制是不是很酷?你不需要去寫一個APP應(yīng)用來實現(xiàn)這種功能,現(xiàn)在的手機(jī)瀏覽器已經(jīng)支出了web socket技術(shù),這提供了很多的可能。這篇文章我們將用Node.js和Socket.io來實現(xiàn)手機(jī)控制PC的效果。

用手機(jī)來實現(xiàn)遠(yuǎn)程控制是不是很酷?你不需要去寫一個APP應(yīng)用來實現(xiàn)這種功能,現(xiàn)在的手機(jī)瀏覽器已經(jīng)支出了web socket技術(shù),這提供了很多的可能。

這篇文章我們將用Node.js和Socket.io來實現(xiàn)手機(jī)控制PC的效果。

我們不必到處尋找基于HTML5的這種應(yīng)用庫。我們將使用Reveal.js-它來處理幻燈片動畫效果,并支持鍵盤和觸摸事件。

我們不必自己來實現(xiàn)遠(yuǎn)程控制的接口,我們將實現(xiàn)手機(jī)和電腦的同步。這樣不僅能控制進(jìn)度,也能同步的顯示在你的手機(jī)上。

實現(xiàn)思路

技術(shù)上很簡單。Reveal.js讓當(dāng)前的幻燈片序號在URL的hash上(e.g. http://example.com/#/1).我們將這個hash發(fā)送到所有連接的設(shè)備上,

對應(yīng)的將會根據(jù)這個hash來自動的顯示響應(yīng)幻燈片。這樣的話,別人可以方便的直接通過url來直接訪問到顯示的頁面,所有我們需要輸入一個驗證碼

在連接之前進(jìn)行驗證。

要說的是Reveal.js已經(jīng)有一套API,我們可以直接調(diào)用來同步。但是hash變化的技術(shù)很簡單,我們可以直接來實現(xiàn)。

[[140461]]

運(yùn)行

你可以本地運(yùn)行示例,或者部署到能提供node.js環(huán)境的服務(wù)器上。本地運(yùn)行更簡單些,但是必須本地有node.js并執(zhí)行npm install.

運(yùn)行本地代碼

  • 下載示例代碼
  • 確保本地已經(jīng)安裝node.js。如果沒有,請安裝
  • 解壓剛才下載的代碼包
  • 打開終端進(jìn)入相應(yīng)的文件夾
  • 運(yùn)行npm install來安裝依賴包
  • 運(yùn)行node app.js來啟動應(yīng)用
  • PC端在瀏覽器打開http://localhost:8080,并輸入連接碼(默認(rèn)是kittens)
  • 在手機(jī)端瀏覽器打開http://,并輸入連接碼
  • 請享受

代碼

思路說完,讓我們來看看代碼。這主要涉及2個js文件-app.js服務(wù)端控制,script.js瀏覽器端。你可以運(yùn)行這個應(yīng)用在Node.js 1.10+或者io.js.

后端,我們用到了expressSocket.io。它主要用來響應(yīng)socket.io的事件監(jiān)聽。用express.static來讓public下的文件可以訪問到。

public/index.html文件保護(hù)顯示的代碼。express.static將會讓它自動顯示,所以我們不需要/來路由。

app.js

  1. // This is the server-side file of our mobile remote controller app. 
  2. // It initializes socket.io and a new express instance. 
  3. // Start it by running 'node app.js' from your terminal. 
  4. // Creating an express server 
  5. var express = require('express'),app = express(); 
  6. // This is needed if the app is run on heroku and other cloud providers: 
  7. var port = process.env.PORT || 8080
  8. // Initialize a new socket.io object. It is bound to 
  9. // the express app, which allows them to coexist. 
  10. var io = require('socket.io').listen(app.listen(port)); 
  11. // App Configuration 
  12. // Make the files in the public folder available to the world 
  13. app.use(express.static(__dirname + '/public')); 
  14. // This is a secret key that prevents others from opening your presentation 
  15. // and controlling it. Change it to something that only you know. 
  16. var secret = 'kittens'
  17. // Initialize a new socket.io application 
  18. var presentation = io.on('connection', function (socket) { 
  19.     // A new client has come online. Check the secret key and 
  20.     // emit a "granted" or "denied" message. 
  21.     socket.on('load', function(data){ 
  22.         socket.emit('access', { 
  23.             access: (data.key === secret ? "granted" : "denied"
  24.         }); 
  25.     }); 
  26.     // Clients send the 'slide-changed' message whenever they navigate to a new slide. 
  27.     socket.on('slide-changed', function(data){ 
  28.         // Check the secret key again 
  29.         if(data.key === secret) { 
  30.             // Tell all connected clients to navigate to the new slide 
  31.             presentation.emit('navigate', { 
  32.                 hash: data.hash 
  33.             }); 
  34.         } 
  35.     }); 
  36. }); 
  37. console.log('Your presentation is running on http://localhost:' + port); 

下面是前端的js文件,將監(jiān)聽hashchange事件,并發(fā)送socket.io消息到服務(wù)器端。

public/assets/js/script.js

 
  1. $(function() { 
  2.     // Apply a CSS filter with our blur class (see our assets/css/styles.css) 
  3.     var blurredElements = $('.homebanner, div.reveal').addClass('blur'); 
  4.     // Initialize the Reveal.js library with the default config options 
  5.     // See more here https://github.com/hakimel/reveal.js#configuration 
  6.     Reveal.initialize({ 
  7.         history: true        // Every slide will change the URL 
  8.     }); 
  9.     // Connect to the socket 
  10.     var socket = io(); 
  11.     // Variable initialization 
  12.     var form = $('form.login'), 
  13.         secretTextBox = form.find('input[type=text]'); 
  14.     var key = "", animationTimeout; 
  15.     // When the page is loaded it asks you for a key and sends it to the server 
  16.     form.submit(function(e){ 
  17.         e.preventDefault(); 
  18.         key = secretTextBox.val().trim(); 
  19.         // If there is a key, send it to the server-side 
  20.         // through the socket.io channel with a 'load' event. 
  21.         if(key.length) { 
  22.             socket.emit('load', { 
  23.                 key: key 
  24.             }); 
  25.         } 
  26.     }); 
  27.     // The server will either grant or deny access, depending on the secret key 
  28.     socket.on('access', function(data){ 
  29.         // Check if we have "granted" access. 
  30.         // If we do, we can continue with the presentation. 
  31.         if(data.access === "granted") { 
  32.             // Unblur everything 
  33.             blurredElements.removeClass('blurred'); 
  34.             form.hide(); 
  35.             var ignore = false
  36.             $(window).on('hashchange', function(){ 
  37.                 // Notify other clients that we have navigated to a new slide 
  38.                 // by sending the "slide-changed" message to socket.io 
  39.                 if(ignore){ 
  40.                     // You will learn more about "ignore" in a bit 
  41.                     return
  42.                 } 
  43.                 var hash = window.location.hash; 
  44.                 socket.emit('slide-changed', { 
  45.                     hash: hash, 
  46.                     key: key 
  47.                 }); 
  48.             }); 
  49.             socket.on('navigate', function(data){ 
  50.                 // Another device has changed its slide. Change it in this browser, too: 
  51.                 window.location.hash = data.hash; 
  52.                 // The "ignore" variable stops the hash change from 
  53.                 // triggering our hashchange handler above and sending 
  54.                 // us into a never-ending cycle. 
  55.                 ignore = true
  56.                 setInterval(function () { 
  57.                     ignore = false
  58.                 },100); 
  59.             }); 
  60.         } 
  61.         else { 
  62.             // Wrong secret key 
  63.             clearTimeout(animationTimeout); 
  64.             // Addding the "animation" class triggers the CSS keyframe 
  65.             // animation that shakes the text input. 
  66.             secretTextBox.addClass('denied animation'); 
  67.             animationTimeout = setTimeout(function(){ 
  68.                 secretTextBox.removeClass('animation'); 
  69.             }, 1000); 
  70.             form.show(); 
  71.         } 
  72.     }); 
  73. }); 

現(xiàn)在是幻燈放映時間

手機(jī)遠(yuǎn)程訪問控制已經(jīng)可以了。希望你能從中得到有趣的體驗。這種高端的玩具,還不快點(diǎn)兒操練起來!!

責(zé)任編輯:倪明 來源: tutorialzine
相關(guān)推薦

2011-09-08 13:53:31

Node.js

2013-10-23 17:17:31

Node.jsdoT

2014-04-10 09:43:00

Node.jsTwilio

2021-05-25 11:55:30

Python手機(jī)監(jiān)控遠(yuǎn)程

2014-04-10 09:55:46

手機(jī)Node.jswilio

2014-07-22 10:29:04

背包算法coffee

2019-07-26 14:40:58

Vue.jsSocket.IO前端

2016-11-22 13:25:28

Apache Spar大數(shù)據(jù)

2011-12-23 10:51:24

Node.js

2017-09-05 15:30:00

JavascriptSocket.ioNode.js

2014-01-17 17:33:32

遠(yuǎn)程開機(jī)

2022-09-04 15:54:10

Node.jsAPI技巧

2017-03-13 10:00:25

Chrome瀏覽器Windows 10

2022-04-01 08:02:32

Node.js快照加速hooks

2022-04-02 06:04:03

Node.js代碼緩存V8

2012-01-09 13:24:27

2014-01-07 17:21:27

遠(yuǎn)程控制

2021-11-16 08:51:29

Node JavaScript變量類型

2013-12-20 16:43:33

遠(yuǎn)程開機(jī)關(guān)機(jī)

2021-09-10 06:50:03

Node.jsSocket端口
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

91精品在线观看国产| 影院在线观看全集免费观看| 久久男女视频| 中文字幕欧美日韩| 欧美日韩一区二区区别是什么| 91九色国产在线播放| 国产视频一区二区三区在线观看| 国产日韩欧美视频| 国产精品suv一区二区三区| 欧美日中文字幕| 亚洲成人精品久久| 男女视频在线看| 91色在线看| 国产精品成人网| 久久福利电影| 99热这里只有精| 日韩高清不卡在线| 久久久久久久999| 天天做夜夜爱爱爱| 蜜桃国内精品久久久久软件9| 欧美一区二区三区人| 欧美日韩在线不卡视频| 欧美xxxx视频| 国产精品国产三级国产aⅴ中文 | 91蜜桃在线免费视频| 国产一区香蕉久久| 中文字幕国产在线观看| 狠狠综合久久av一区二区老牛| 在线日韩欧美视频| 久久人人爽人人人人片| 亚洲精品a区| 欧美精品 日韩| 日本中文字幕高清| 都市激情综合| 精品久久久久久亚洲国产300| 国风产精品一区二区| 9191在线| 国产精品无码永久免费888| 久久久av水蜜桃| 成人久久精品人妻一区二区三区| 狠狠色丁香久久婷婷综合_中| 国产精品久久久久av免费| 国产九色在线播放九色| 国产欧美激情| 欧美一级免费看| 亚洲高清毛片一区二区| 亚洲精品综合| 91成人在线视频| 国产成人无码精品久久久久| 国精品一区二区三区| 精品少妇v888av| 欧美偷拍第一页| 围产精品久久久久久久| 日韩一区二区三区xxxx| 精品在线观看一区| 久久一区二区三区电影| 日韩视频―中文字幕| 午夜国产福利视频| 91影院成人| 久久伊人免费视频| 国产高潮流白浆| 欧美日韩一区自拍| 午夜精品久久久久久久99热| 日本亚洲欧美在线| 国产精品亚洲产品| 国产成人在线亚洲欧美| 国产成人av免费| 久久国产精品色| 97se亚洲综合| 日韩在线一区二区三区四区| 91丨九色porny丨蝌蚪| 欧美日本韩国在线| 18免费在线视频| 一区二区三区在线观看视频| 亚洲精品蜜桃久久久久久| 国产精品25p| 欧美亚洲国产bt| 18深夜在线观看免费视频| 国产精品色呦| 一区二区三区四区视频| 神马久久精品综合| 激情久久久久| 日韩av电影国产| 国产理论视频在线观看| 福利视频网站一区二区三区| 久久伊人一区| 久久99精品久久久久久野外| 亚洲国产日日夜夜| 少妇人妻互换不带套| 欧美爱爱视频| 亚洲成人久久久| 97在线观看免费视频| 国产精品久久天天影视| 欧美激情视频免费观看| 黄色一级视频免费看| 久久精品免费看| 九9re精品视频在线观看re6| 尤物网在线观看| 大荫蒂欧美视频另类xxxx| 国产一伦一伦一伦| 色爱av综合网| 麻豆成人在线看| 国产主播第一页| 粉嫩嫩av羞羞动漫久久久| 欧美一区二区三区四区五区六区| 国内自拍偷拍视频| 中文字幕第三页| 成人午夜激情视频| 亚洲欧美一区二区原创| av日韩国产| 欧美喷潮久久久xxxxx| 在线观看国产免费视频| 偷偷www综合久久久久久久| 57pao成人永久免费视频| 国产伦精品一区二区三区免.费| 99久久er热在这里只有精品66| 亚洲无玛一区| 极品美女一区| 亚洲成人激情在线观看| 免费中文字幕在线| 蜜桃视频免费观看一区| 免费电影一区| av在线私库| 日韩免费一区二区| 精品少妇一区二区三区密爱| 免费亚洲一区| 久久艳妇乳肉豪妇荡乳av| 性欧美高清come| 欧美日韩一区高清| 亚洲精品国产91| 免费在线成人| 国产亚洲福利社区| 成人超碰在线| 精品免费日韩av| 免费人成年激情视频在线观看| 韩国欧美一区二区| 亚洲7777| 九九热这里有精品| 一本色道久久88综合亚洲精品ⅰ| 亚洲精品男人的天堂| 成人午夜视频在线观看| 久久亚洲a v| 亚洲乱码一区| 欧美精品激情在线观看| 国产成人无码www免费视频播放| 中文字幕综合网| 天天色天天综合网| 天天色综合色| 2019国产精品视频| 欧美女同一区| 精品乱码亚洲一区二区不卡| 久久久99精品| 成人动漫精品一区二区| 鲁一鲁一鲁一鲁一色| 亚洲区小说区| 国产精品欧美日韩一区二区| 岛国最新视频免费在线观看| 欧美在线观看一二区| 美女100%露胸无遮挡| 久久国产精品色婷婷| 韩国黄色一级大片| 日韩精品成人| 69影院欧美专区视频| 日本人妖在线| 欧美日韩综合色| 91精品一区二区三区蜜桃| 国产一区二区按摩在线观看| 成人在线播放网址| 欧美影院天天5g天天爽| 国产精品xxx视频| 香蕉视频在线免费看| 欧美一区二区视频在线观看 | 亚洲日本青草视频在线怡红院| 最新av免费在线观看| 午夜视频一区| 久久99精品久久久久久久久久 | 678五月天丁香亚洲综合网| 欧美黑人精品一区二区不卡| 播五月开心婷婷综合| 午夜视频在线瓜伦| 亚洲欧美偷拍自拍| 国内精品视频在线播放| 色老太综合网| www.欧美三级电影.com| 国产黄色美女视频| 欧美日韩一区二区精品| 波多野结衣家庭教师在线观看 | 日本高清成人vr专区| 亚洲精品xxx| 中文字幕在线播放日韩| 一区二区在线观看免费| 国产精品无码久久久久久| 久久精品国产第一区二区三区| 国产精品久久久久9999爆乳| 国产精品一区二区av日韩在线| 91香蕉电影院| 欧美aa视频| 久久国产精品电影| 精品视频二区| 欧美va亚洲va| 中文字幕一二区| 欧美午夜激情小视频| 国产一二三四区| 久久久不卡影院| 精品久久久久久无码人妻| 日本91福利区| 精品少妇一区二区三区在线| 中文字幕日韩一区二区不卡| 日本欧美色综合网站免费| 红杏aⅴ成人免费视频| 国产欧美精品久久久| 中文字幕色婷婷在线视频| 久久国产精品影视| 成人欧美亚洲| 精品一区二区三区三区| 精品免费久久久| 欧美日韩五月天| 国产美女www| 欧美日韩国产一中文字不卡| 国产又黄又爽又无遮挡| 成人免费一区二区三区视频 | 成人3d精品动漫精品一二三| 精品国产一区二区三区麻豆小说 | 蜜桃视频在线观看免费视频| 久久国产天堂福利天堂| 欧洲不卡av| 深夜福利91大全| 国产精品四虎| 亚洲欧美国产日韩中文字幕| 色呦呦免费观看| 精品久久免费看| 精品人妻一区二区三区四区不卡 | av网页在线观看| 国产+成+人+亚洲欧洲自线| 91aaa精品| 国产综合色视频| 中文字幕亚洲影院| 激情五月婷婷综合| 中文字幕亚洲乱码| 麻豆一区二区三| 一级片视频免费观看| 蜜桃av一区二区三区电影| 噼里啪啦国语在线观看免费版高清版| 午夜亚洲视频| 88av.com| 免费高清视频精品| 日本人69视频| 精品一区二区三区在线观看国产| 国产三级国产精品国产专区50| 免费成人美女在线观看| 波多野结衣天堂| 六月婷婷色综合| 亚洲三级在线观看视频| 国产美女视频91| 无码人妻丰满熟妇区毛片蜜桃精品| 国产麻豆视频一区| 国产又粗又猛又爽又黄| 国产91丝袜在线18| 在线观看国产三级| 久久综合色8888| 国产熟女一区二区| 18涩涩午夜精品.www| 色婷婷在线视频观看| 亚洲一区二区在线免费看| 日韩欧美亚洲一区二区三区| 日韩欧美精品中文字幕| 最新中文字幕免费| 在线播放欧美女士性生活| 亚洲精品18p| 日韩成人激情视频| 国产高清在线| 免费91麻豆精品国产自产在线观看| 尤物视频在线看| 欧美一级成年大片在线观看 | 国产高清在线一区二区| 天堂成人娱乐在线视频免费播放网站| 欧美日韩一区二区视频在线观看| 日本一区二区免费高清| 女人床在线观看| 亚洲综合日韩| 天堂在线中文在线| 成人av网址在线观看| 男生草女生视频| 亚洲色图一区二区| 成人免费看片98欧美| 欧美视频一区二区三区在线观看 | 亚洲美女激情视频| 欧美成人hd| 欧美在线www| 精品视频一区二区三区在线观看| 精品一区2区三区| 97精品国产一区二区三区| 日韩伦理在线免费观看| 秋霞国产午夜精品免费视频| 少妇极品熟妇人妻无码| 国产拍揄自揄精品视频麻豆| 久久精品99国产精| 欧美艳星brazzers| 亚洲精品无码专区| 日韩中文字幕在线精品| 在线观看v片| 俄罗斯精品一区二区三区| 精品精品久久| 国产欧美日韩网站| 国产剧情一区在线| 天天舔天天操天天干| 性感美女久久精品| 国产绿帽一区二区三区| 亚洲天堂日韩电影| 春色校园综合激情亚洲| 91在线中文字幕| 清纯唯美亚洲综合一区| 国产美女网站在线观看| 国产精品911| 久久久精品少妇| 欧洲激情一区二区| 色呦呦中文字幕| 久久久亚洲精选| 成人亚洲精品| 一区二区免费电影| 久久先锋资源| www.88av| 亚洲成av人片一区二区三区| 国产三级按摩推拿按摩| 综合网中文字幕| 激情开心成人网| 免费在线成人av| 国产视频一区欧美| 野战少妇38p| 亚洲午夜久久久久久久久电影网 | 成人全视频免费观看在线看| 久久久久久久免费| 一本久道综合久久精品| 黄色性视频网站| 亚洲在线视频免费观看| www.五月天激情| 久久国产精品电影| 秋霞影院一区| 大西瓜av在线| av亚洲精华国产精华精华| 妺妺窝人体色www聚色窝仙踪| 正在播放一区二区| 国产二区三区在线| 成人午夜在线观看| 欧美a级一区| 一级黄色免费毛片| 亚洲综合一区二区精品导航| 国产99久久九九精品无码免费| 久久在线免费视频| 精品视频一二| 国产二区视频在线| 99riav久久精品riav| 日韩精品手机在线| 国产视频自拍一区| 国产精品高清乱码在线观看 | 黄色国产精品| 欧美日韩人妻精品一区在线| 无吗不卡中文字幕| 久久久久久久久亚洲精品| 国产成人啪精品视频免费网| 国产一区网站| 日本77777| 午夜精品国产更新| 秋霞av在线| 国产免费亚洲高清| 国产精品av一区二区| 国产亚洲无码精品| 在线观看国产日韩| 黄网站在线播放| 极品日韩久久| 日韩精品午夜视频| www日韩在线| 日韩国产精品视频| 中韩乱幕日产无线码一区| 中文字幕av久久| jizz一区二区| 在线观看国产一区二区三区| 久久精品99无色码中文字幕 | 亚洲国产精品国自产拍av秋霞| 欧美大胆a人体大胆做受| 日韩久久精品一区二区三区| 蜜臀av一区二区在线免费观看| 日本中文字幕免费在线观看| 欧美大胆人体bbbb| 成人日韩在线观看| 91大学生片黄在线观看| 久久综合久久99| 国产精品一级二级| 欧美影院久久久| 亚洲精品电影| 精品夜夜澡人妻无码av | 欧美在线视频导航| 999久久久精品国产| 小毛片在线观看| 欧美日韩精品欧美日韩精品一| 日本精品一二三区| 国产情侣一区| 女教师淫辱の教室蜜臀av软件| 欧美mv日韩mv亚洲| 日韩av电影资源网|