Ⅰ 怎麼連接nodejs伺服器
前面已經學習了WebSocket API,包括事件、方法和屬性。詳情:WebSocket(二)--APIWebSocket是基於事件驅動,支持全雙工通信。下面通過三個簡單例子體驗一下。
簡單開始
1.安裝node。/
2.安裝ws模塊
ws:是nodejs的一個WebSocket庫,可以用來創建服務。
3.server.js
在項目裡面新建一個server.js,創建服務,指定8181埠,將收到的消息log出來。
//建立連接
var ws = new WebSocket("ws://localhost:8181"); var nickname = "";
ws.onopen = function (e) {
console.log('Connection to server opened');
} //顯示
function appendLog(type, nickname, message) { if (typeof message == "undefined") return; var messages = document.getElementById('messages'); var messageElem = document.createElement("li"); var preface_label; if (type === 'notification') {
preface_label = "<span class="label label-info">*</span>";
} else if (type == 'nick_update') {
preface_label = "<span class="label label-warning">*</span>";
} else {
preface_label = "<span class="label label-success">"
+ nickname + "</span>";
} var message_text = "<h2>" + preface_label + " "
+ message + "</h2>";
messageElem.innerHTML = message_text;
messages.appendChild(messageElem);
} //收到消息處理
ws.onmessage = function (e) { var data = JSON.parse(e.data);
nickname = data.nickname;
appendLog(data.type, data.nickname, data.message);
console.log("ID: [%s] = %s", data.id, data.message);
}
ws.onclose = function (e) {
appendLog("Connection closed");
console.log("Connection closed");
} //發送消息
function sendMessage() { var messageField = document.getElementById('message'); if (ws.readyState === WebSocket.OPEN) {
ws.send(messageField.value);
}
messageField.value = '';
messageField.focus();
} //修改名稱
function changName() { var name = $("#name").val(); if (ws.readyState === WebSocket.OPEN) {
ws.send("/nick " + name);
}
}
運行結果:
頁面關閉之後,連接馬上斷開。
這種實時響應的體驗簡直不能太爽,代碼也清爽了,前端體驗也更好,客戶端不用一直發請求,服務端不用等著被輪詢。
小結:上面例子的代碼都很好理解,接下來學習WebSocket協議。
Ⅱ nodejs 如何部署到伺服器上
兩點:第一是否是線上服務,第二是否需要守護進程;
第一點,如果是線上服務,毫無疑問回需要一個守護進答程來保證,發生意外導致進程退出後,能重新啟動,提供服務;當然就需要pm2等守護進程來啟動,使用方法請自行參照github;第二點,是否需要守護進程,如果不需要,那麼直接node啟動即可;如果需要,也不必擔心pm2啟動進程後並不會搶占伺服器資源,如果你的server有很大的需求,毋庸置疑需要更多的內存和cpu,如果沒有很大需求,pm2會基於linux的資源調度策略,並不會搶占;
Ⅲ node.js可以寫服務端嗎
可以的,Nodejs就是為服務端而生的,說開了NodeJs只是JavaScript作為CommonJS的實現,使得JavaScript在伺服器端有了用武之地,所以NodeJs從語法層面來說還是JavaScript。但是與客戶端的JavaScript又有所區別。注意以下幾點:
要學習NodeJs,必須有一定的JavaScript基礎,理解事件模型,了解JavaScript的語法和特性,理解JavaScript面向對象編程
學習NodeJs類似於Python等代碼組織的方式——包機制,require和exports。
一些基本的操作系統,HTTP等網路通信,資料庫(尤其是非關系資料庫),Web編程的知識有所了解。
具體的你可以訪問NODEJS官網或者訪問國內的社區、博客查詢相關內容
Ⅳ Nodejs程序怎麼在伺服器上運行
首先實現一個處理靜態資源的函數,其實就是對本地文件的讀取操作,這個方法已滿足了上面說的靜態資源的處理。
//處理靜態資源
function staticResHandler(localPath, ext, response) {
fs.readFile(localPath, "binary", function (error, file) {
if (error) {
response.writeHead(500, { "Content-Type": "text/plain" });
response.end("Server Error:" + error);
} else {
response.writeHead(200, { "Content-Type": getContentTypeByExt(ext) });
response.end(file, "binary");
}
});
}
Ⅳ nodejs既然是一個伺服器那麼沒有資料庫沒有介面也可以獲取數據嗎
nodejs可用express搭建個伺服器,提交表單一般要保存到資料庫的,否則表單沒有意義。
Ⅵ 如何在伺服器上搭建nodejs
先確認下系統環境合不合要求
Python -V(確認python版本大於2.6)
訪問http://nodejs.org/download/下載需要的Node.js版本(wget
http://nodejs.org/dist/v0.10.26/node-v0.10.29.tar.gz )
解壓 tar zxvf node-v0.10.26-linux-x64.tar.gz
進入目錄 cd node-v0.10.26-linux-x64
./configure --prefix=/home/work/setups/node-v0.10.26
make
sudo make install
添加到系統環境 echo "export PATH=$PATH:/home/work/setups/node-v0.10.26/bin">>
~/.bash_profile
. ~/.bash_profile執行該文件更新$PATH變數
###安裝Express
sudo npm install express
-gd g參數:把express安裝到NodeJS的lib目錄d參數:同時安裝依賴模塊包
sudo npm install forever -gd
(異常情況:
如果遇到npm 找不到的情況 確認sudo node -v是否找不到 找不到的話:需要added /usr/local/bin to secure_path in /etc/sudoers :
sudo visudo
把 Defaults secure_path =
/sbin:/bin:/usr/sbin:/usr/bin 這行 改為 Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin然後:x保存退出
如果遇到
npm ERR! Error: Hostname/IP doesn't match certificate's altnames
執行 npm config set strict-ssl false
如果遇到 npm ERR! registry error parsing json
npm cache clean
執行 npm config set registry http://registry.npmjs.eu/
)
###部署forever
$ npm install -g forever
啟動
NODE_ENV=pro LANG='zh' /usr/local/bin/foreverstart-o
/home/work/log/node_out.log-e /home/work/log/node_err.log /home/work/webroot/index.js
NODE_ENV=pro 環境變數 pro為生產環境(程序中可以指定)
LANG 環境變數 指定默認語言
node_out.log 輸出日誌 注意路徑別抄成我的了
node_err.log 錯誤日誌
index.js 啟動文件
Ⅶ 如何用nodejs開發server端ui層
在軟體開發領域,前端工程師曾經是一個比較糾結的職業。在Web技術真正發展起來之前的相當長一段時間里,由於技術門檻很低,前端工程師行業一直是魚
龍混雜的狀態。其中很多號稱是Web開發者的人實際上並沒有什麼專業的前端技能,有些工作就是被當做簡單的力氣活由美術設計師順便做做而已。當時很多人甚
至並不認為有朝一日會有這么一群人用HTML、CSS和JavaScript這三門技術謀生——他們想,這怎麼可能呢——這些技術看起來都是如此簡單,隨
隨便便混在一起用就哦了,把做這些活看成一種正兒八經的職業簡直是笑話。
隨著技術發展,人們對前端工作的看法開始改變了,一些人從美工頁面仔真正轉變為專業的前端工程師。JavaScript,這門很多工程師曾經把它當做
玩具而不屑一顧的腳本語言悄然演變成推動互聯網發展的核心驅動力。伴隨著越來越多的瀏覽器的出現使得用HTML和CSS兼容各種瀏覽器變得越來越難,於是
能實現兼容各種瀏覽器的頁面成為了前端工程師的金字招牌,前端職業開始變得炙手可熱。
兩個獨立的UI層
即使Ajax這種技術風靡全球之後,前端工程師的主要工作曾經也僅局限於瀏覽器窗口之內。HTML、CSS和JavaScript是前端工程師必須要
掌握的三種核心技術,前端同後端的唯一交集僅僅是前端需要確保後端的數據能夠以正確合適的格式輸出到瀏覽器上。在某種意義上來說,Web開發有兩個UI
層,一個是在瀏覽器裡面我們最終看到的,另一個在server端,負責生成和拼接頁面。因為傳統前端基本上沒有辦法自主決定server端如何處理數據拼
接生成頁面,因為數據如何組織,往往是會受到後端工程師所選擇的技術框架的影響的,而後端不理解前端的一些需求,所以他們選擇的時候也就很少會從前端方便
的角度進行考慮。
在上面這張圖的結構里,瀏覽器里的UI層是完全歸前端工程師管的。伺服器端的UI層則是前後端都關心的部分,剩下的部分是服務端的底層,諸如數據處
理、緩存、許可權控制和其他核心模塊,這些是歸後端管的。我們還是回過頭來看我們所關心的server端UI層吧,這一層所做的事情通常是拼頁面模板以及處
理具體的業務交互邏輯。
所以,傳統的前後端分工是由前端負責瀏覽器,而其他瀏覽器之外的東東統統歸由後端負責。前後端的交集server的UI層也是由後端來主導的。這是目前最主流的一種前後端分工方式。
讓Node.js來改變這一切
Node.js一發布,立刻在前端工程師中引起了軒然大波,前端工程師們幾乎立刻對這一項技術表露出了相當大的熱情和期待。上一次一種技術能被整個前
端界如此關注那還是在幾年之前,那時候Ajax這個概念剛剛被提出來。讓JavaScript跑在server端,這個想法簡直太棒了。這下我們不用再去
學那些什麼PHP啦、Ruby啦、Java啦、Scala啦或者其他什麼對前端來說奇怪的語言,也可以輕松地將我們的領域擴展到server端,多麼美好
的前景!
我從來不是一個PHP的愛好者,但是我在Yahoo工作的時候,我不得不使用PHP。為了這份工作,我得忍受花費許多額外的時間去修復由於PHP的傻
逼特性導致的坑。對於一直使用Java作為服務端語言的我來說,對PHP實在是很難適應。我相信,也一直堅持認為一種靜態類型的語言更加適合用來構建你的
業務邏輯的核心部分。因此,雖然我很喜歡JavaScript,但我也不會用它來做所有的事情,比如我絕對不會只用JavaScript來實現一個完整的
購物車系統。
對於我來說,Node.js不是一個解決一切問題的銀彈,我不會用它來取代server端所有別的語言模塊。事實上,Node.js可以做到其他後端
語言所能做到的幾乎所有的事情,但是我不會這么做。我所認為的比較合適的做法是用Node.js來解決server端UI層的問題,這樣我就可以將這一層
從後端的其他部分剝離出來。
現在越來越多的公司傾向於採用面向服務(service-oriented)的架構,由後端提供給前端RESTful的介面,這么做是為了更好的做前
後端的依賴分離。如果所有的關鍵業務邏輯都封裝成REST調用,就意味著在上層只需要考慮如何用這些REST介面構建具體的應用。那些後端程序員們根本不
操心具體數據是如何從一個頁面傳遞到另一個頁面的,他們也不用管用戶數據更新是通過Ajax非同步獲取的還是通過刷新頁面,當然他們更不關心的是你究竟在用
jQuery還是YUI——這與他們根本毫無關系嘛。後端程序員真正應該關心的難道不應該是數據如何存儲、如何容錯以及如何保證安全性嗎?
現在我們看看Node.js帶來的好處吧,當後端程序員提供了REST服務之後,現在我們前端程序員可以使用Node.js來處理server端的
UI層啦,我們可以將通過REST調用拿到的數據隨心所欲地進行處理,不管是渲染模板還是直接提供給Ajax,現在我們僅僅用JavaScript一種語
言就可以輕松實現這些。至於後端程序員,他們只需要保證數據的正確性,無論他們使用任何一種語言來封裝REST調用,都不會對前端造成影響,這樣前後端的
職責不就被更好地劃分了嗎?這樣分工之後前端的領域就從瀏覽器小框框裡面擴展到了server的UI層,而這一層本來對於後端來說是一件他們做起來不輕松
的零碎活兒。
不!這太聳人聽聞了!
前端工程師想接手server的UI層是不那麼容易被後端工程師們理解和接受的,因為這部分工作本來屬於後端工程師的職責。尤其是現在還有很多後端工
程師認為JavaScript是一種極簡單的「玩具語言」,他們將會想如此重要的服務端工作怎麼能交給這群看起來不太靠譜的人用如此「不嚴肅」的語言來
玩?在我的經驗里,這種觀念上的沖突是前後端工程師們在是否引入Node.js這一問題上的最大分歧。Server端UI層是前後端的中間地帶,而之前通
常後端程序員們對這個地帶比較有主導權,所以一旦你進入這個本來屬於後端主導的領域,爭議自然是不可避免的。
實際上放棄傳統的角色立場,將server的UI層分給前端,在大型Web架構下是很有意義的。不這么做的話,有時候前端想要從後端要到正確的數據,
還不得不關心後端究竟是用什麼語言實現的。過去的分工中,那些原本屬於核心業務底層考慮的東西會被暴露給server的UI層,而這些問題往往會不小心影
響到前端。前端本來不需要關注這些問題,因為前後端所關心的方面根本完全不一樣嘛。如果你理解單一職能、責任分離和模塊化,你就會理解我所說的,甚至會覺
得以前不把server的UI層分給前端實在是很笨。
只可惜,之前Node.js這樣的東東不存在,所以當時沒有前端合適的技術讓前端工程師們自己搞定server的UI層。於是後端的同學們用PHP的
人就順手把UI用PHP的模板實現了,同樣的用Java的後端同學也自然而然地用JSP搞定這個問題。這不是前端的同學不願意去做Server的UI,而
是因為在之前,沒有一種我們熟悉的技術讓我們能夠搞定這些事情,但是現在不一樣了,我們有Node.js了。
結論
我很喜歡Node.js,我喜歡由這項技術給前端界帶來的更大的發展潛力。我並不認為整個後端完全用Node.js來實現會是一個很好的方案,盡管
Node.js完全可以做到這一切。我認為目前Node.js最大的價值是能讓前端完全把控整個UI層,不論是瀏覽器的還是Server端的,做到這一
點,我們工作的效率能得到很大的提升。我們前端更擅長於決定數據以何種方式呈現能帶給用戶更好的體驗,而後端則更加了解如何處理數據。在這種新的分工方式
下,後端只需要提供合適的數據操作介面,前端自己就能構建漂亮的、有效率的、可用性高的介面,從而實現用戶所喜歡的各種交互。
使用Node.js來搞定server的UI層也將後端工程師從他們不擅長的領域解放了出來。於是我們得到了一個Web開發的靈丹妙葯:前後端之間只
需要通過數據來交互,這種模型使得兩方相互獨立,各自都能夠快速並且長久開發,而只要保證數據介面不變,前後端彼此之間就不會造成任何影響。