websocket

首先說(shuō)websocket是雙向通信,主要用在做 直播的網(wǎng)站了,各種的數(shù)據(jù)交互等等;
而ajax是單向通信。
優(yōu)點(diǎn)
較少的控制開(kāi)銷(xiāo)。在連接創(chuàng)建后,服務(wù)器和客戶端之間交換數(shù)據(jù)時(shí),用于協(xié)議控制的數(shù)據(jù)包頭部相對(duì)較小。在不包含擴(kuò)展的情況下,對(duì)于服務(wù)器到客戶端的內(nèi)容,此頭部大小只有2至10字節(jié)(和數(shù)據(jù)包長(zhǎng)度有關(guān));對(duì)于客戶端到服務(wù)器的內(nèi)容,此頭部還需要加上額外的4字節(jié)的掩碼。相對(duì)于HTTP請(qǐng)求每次都要攜帶完整的頭部,此項(xiàng)開(kāi)銷(xiāo)顯著減少了。

更強(qiáng)的實(shí)時(shí)性。由于協(xié)議是全雙工的,所以服務(wù)器可以隨時(shí)主動(dòng)給客戶端下發(fā)數(shù)據(jù)。相對(duì)于HTTP請(qǐng)求需要等待客戶端發(fā)起請(qǐng)求服務(wù)端才能響應(yīng),延遲明顯更少;即使是和Comet等類似的長(zhǎng)輪詢比較,其也能在短時(shí)間內(nèi)更多次地傳遞數(shù)據(jù)。
保持連接狀態(tài)。于HTTP不同的是,Websocket需要先創(chuàng)建連接,這就使得其成為一種有狀態(tài)的協(xié)議,之后通信時(shí)可以省略部分狀態(tài)信息。而HTTP請(qǐng)求可能需要在每個(gè)請(qǐng)求都攜帶狀態(tài)信息(如身份認(rèn)證等)。

更好的二進(jìn)制支持。Websocket定義了二進(jìn)制幀,相對(duì)HTTP,可以更輕松地處理二進(jìn)制內(nèi)容。

可以支持?jǐn)U展。Websocket定義了擴(kuò)展,用戶可以擴(kuò)展協(xié)議、實(shí)現(xiàn)部分自定義的子協(xié)議。如部分瀏覽器支持壓縮等。

更好的壓縮效果。相對(duì)于HTTP壓縮,Websocket在適當(dāng)?shù)臄U(kuò)展支持下,可以沿用之前內(nèi)容的上下文,在傳遞類似的數(shù)據(jù)時(shí),可以顯著地提高壓縮率。

WebSocket 是獨(dú)立的、創(chuàng)建在 TCP 上的協(xié)議?!?br> Websocket 通過(guò) HTTP/1.1 協(xié)議的101狀態(tài)碼進(jìn)行握手。
為了創(chuàng)建Websocket連接,需要通過(guò)瀏覽器發(fā)出請(qǐng)求,之后服務(wù)器進(jìn)行回應(yīng),這個(gè)過(guò)程通常稱為“握手”(handshaking)。
來(lái)源:前端開(kāi)發(fā)博客
先說(shuō) node.js中都是有哪些模塊呢?
http
fs
mysql
那么websocket是socket.io;
在node.js中 我們都有學(xué)到emit是發(fā)射數(shù)據(jù),on是接收數(shù)據(jù)。
那么咱們就按著這樣的套路寫(xiě)一下websocket來(lái)完成雙向 通信。
再來(lái)說(shuō)一下所在 的問(wèn)題:
1.node服務(wù)器
2.端口
3.包 找不到
安裝
重啟
4.是在git bash
linux命令
官網(wǎng):https://git-scm.com/
5.ws: //->http:// 內(nèi)定的模塊。不用問(wèn)為什么,就得這么寫(xiě)。
現(xiàn)在我們要說(shuō)一下具體的操作:
第一步
新建一個(gè)項(xiàng)目目錄,在文件夾里右擊-git Bash Here; 出現(xiàn)小黑框;
第二步
安裝 npm install socket.io
輸入-----node 文件名.js
第三步
在瀏覽器里輸入對(duì)應(yīng)的服務(wù)器名和端口號(hào)+文件名.html
那么咱們?cè)挷欢嗾f(shuō),下面是 我 做的一個(gè) 小例子,想實(shí)現(xiàn)的效果就是讓服務(wù)器每一秒給我返回一個(gè)時(shí)間戳,僅供參考:
js文件:

var http= require('http');
var fs=require('fs');
var io=require('socket.io');
var httpObj=http.createServer(function(req,res){
  fs.readFile('www'+req.url,function(err,data){
   if(!err){
        res.write(data);
        res.end();
   }else{
        res.write('404');
        res.end();
   }
  });
});
httpObj.listen('9090');
var ws=io.listen(httpObj);
ws.on('connection',function(socket){
    //發(fā)送數(shù)據(jù)
    setInterval(function(){
        socket.emit('time',Date.now());
    },1000);
   socket.on('khd',function(name,value){
       console.log(name,value);
   });
});//有人鏈接我,雙方建立鏈接

html文件

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
</style>
<script src="/socket.io/socket.io.js"></script>
<script>
var ws=io.connect('ws://localhost:9090');
ws.on('time',function(result){
console.log(result);
});
ws.emit('khd','name','出來(lái)')
</script>
</head>
<body>
<p>我是不是你最疼愛(ài)的人</p>
</body>
</html>

那么文件的怎么擺放呢;現(xiàn)在就告訴大家


websocket文件擺放.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容