js發起websocket,js發起遠程網路請求,並且獲取返回結果

本文目錄一覽:

前台不用Socket.io.js如何發起webSocket請求連接?

var ws = new WebSocket(「ws://echo.websocket.org」);

ws.onopen = function(){ws.send(「Test!」); };

ws.onmessage = function(evt){console.log(evt.data);};

ws.onclose = function(evt){console.log(「WebSocketClosed!」);};

ws.onerror = function(evt){console.log(「WebSocketError!」);};

Js WebSocket

html

head

script type=”text/javascript”

var ws = new WebSocket(“ws://localhost:7272”);

//申請一個WebSocket對象,參數是服務端地址,同http協議使用http://開頭一樣,WebSocket協議的url使用ws://開頭,另外安全的WebSocket協議使用wss://開頭

ws.onopen = function(){

//當WebSocket創建成功時,觸發onopen事件

  console.log(“open”);

ws.send(“hello”); //將消息發送到服務端

}

ws.onmessage = function(e){

//當客戶端收到服務端發來的消息時,觸發onmessage事件,參數e.data包含server傳遞過來的數據

    var data = JSON.parse(e.data);

  switch(data[‘type’]){

            // 服務端ping客戶端

            case ‘ping’:

                ws.send(‘{“type”:”pong”}’);

console.log(“ping: “+e.data);

                break;;

            // 登錄 更新用戶列表

            case ‘login’:

    console.log(“login: “+e.data);

                //{“type”:”login”,”client_id”:xxx,”client_name”:”xxx”,”client_list”:”[…]”,”time”:”xxx”}

                /*say(data[‘client_id’], data[‘client_name’],  data[‘client_name’]+’ 加入了聊天室’, data[‘time’]);

                if(data[‘client_list’])

                {

                    client_list = data[‘client_list’];

                }

                else

                {

                    client_list[data[‘client_id’]] = data[‘client_name’];

                }

                flush_client_list();

                console.log(data[‘client_name’]+”登錄成功”);*/

                break;

            // 發言

            case ‘say’:

      console.log(“say: “+e.data);

                //{“type”:”say”,”from_client_id”:xxx,”to_client_id”:”all/client_id”,”content”:”xxx”,”time”:”xxx”}

                //say(data[‘from_client_id’], data[‘from_client_name’], data[‘content’], data[‘time’]);

                break;

            // 用戶退出 更新用戶列表

            case ‘logout’:

    console.log(“logout: “+e.data);

                //{“type”:”logout”,”client_id”:xxx,”time”:”xxx”}

              // say(data[‘from_client_id’], data[‘from_client_name’], data[‘from_client_name’]+’ 退出了’, data[‘time’]);

                //delete client_list[data[‘from_client_id’]];

              //  flush_client_list();

        }

}

ws.onclose = function(e){

//當客戶端收到服務端發送的關閉連接請求時,觸發onclose事件

console.log(“close”);

}

ws.onerror = function(e){

//如果出現連接、處理、接收、發送數據失敗的時候觸發onerror事件

console.log(error);

}

function login()

{

  console.log(“login:111”);

    var login_data = ‘{“type”:”login”,”client_name”:”zyx”,”room_id”:”1″}’;

    console.log(“websocket握手成功,發送登錄數據:”+login_data);

    ws.send(login_data);

}

function send()

{

  console.log(“send:111”);

    ws.send(‘{“type”:”say”,”to_client_id”:”all”,”to_client_name”:”222″,”content”:”txt”}’);

}

function send2()

{

  console.log(“send:111”);

    ws.send(‘{“type”:”say”,”to_client_id”:”7f00000108fc00000011″,”to_client_name”:”222″,”content”:”txt”}’);

}

/script

/head

body

div onclick=”login()” style=”width:100px;height:80px;”

  登錄

/div

div onclick=”send()”  style=”width:100px;height:80px;”

  發送

/div

div onclick=”send2()”  style=”width:100px;height:80px;”

  發送2

/div

/body

/html

WebSocket的簡單實現

WebSocket協議是基於TCP的一種新的網路協議。 瀏覽器通信通常是基於HTTP 協議,為什麼還需要另一個協議?因為http只能由客戶端發起,不能由服務端發起。

而WebSocket 瀏覽器和伺服器只需要完成一次握手,兩者之間就直接可以創建持久性的連接,並進行雙向數據傳輸。

WebSocket規範

WebSocket 協議本質上是一個基於 TCP 的協議。為了建立一個 WebSocket 連接,客戶端瀏覽器首先要向伺服器發起一個 HTTP 請求,這個請求和通常的 HTTP 請求不同,包含了一些附加頭信息,附加信息如圖所示

連接過程(以js(客戶端)和java(伺服器端)為例)

js:ws.send( String msg) ps:入參可以是字元串或者json字元串java:onMessage(String message)message為客戶端傳來的信息

java:sendUser( String msg) js:ws.onmessage

4.斷開連接 onclose ( CloseReason reason)

CloseReason.CloseCode ( WebSocket關閉連接的狀態碼,類似http的404)

js部分:

java部分(javax實現):

ps: session 用來唯一標識連接對象

使用註解@ServerEndpoint

參考文獻

javax websocket:(服務端實現api文檔)

js websocket:(客戶端api文檔)

rfc6455 (websocket協議規範): ** 產品介紹**

在html頁面中,用js調取websocket,發送多條請求

發送,主要有以下幾個步驟:

1.用ClientManager實例化一個對象,並與服務端建立連接;

2.連接成功後,client端程序會調用與之關聯的ClientEndpoint類中的OnOpen方法,一般onOpen方法裡面我們主要是用來發送正式的請求報文(可以使用session.getBasicRemote().sendText(“start”));

3.發送完成後,服務端返迴響應,這時client程序會調用ClientEndpoint類中的OnMessage方法,OnMessage方法一般是用來解析服務端響應的

4.連接關閉;

如何開啟nodejs websocket伺服器

建立一個WebSocket的連接用send方法發送消息。

var ws = new WebSocket(“ws://localhost:8181”);

ws.onopen = function (e) {

console.log(‘Connection to server opened’);

}

function sendMessage() {

ws.send($(‘#message’).val());

}

如何通過js腳本獲取websocket對象

使用一個文本編輯器,把下面代碼複製保存在一個 websocket.html 文件中,然後只要在瀏覽器中打開它,頁面就會使用 websocket 自動連接,發送一個消息,顯示接受到的伺服器響應,然後關閉連接。

!DOCTYPE html  

meta charset=”utf-8″ /  

titleWebSocket Test/title  

script language=”javascript”type=”text/javascript”  

    var wsUri =”ws://echo.websocket.org/”; 

    var output;  

    

    function init() { 

        output = document.getElementById(“output”); 

        testWebSocket(); 

    }  

 

    function testWebSocket() { 

        websocket = new WebSocket(wsUri); 

        websocket.onopen = function(evt) { 

            onOpen(evt) 

        }; 

        websocket.onclose = function(evt) { 

            onClose(evt) 

        }; 

        websocket.onmessage = function(evt) { 

            onMessage(evt) 

        }; 

        websocket.onerror = function(evt) { 

            onError(evt) 

        }; 

    }  

 

    function onOpen(evt) { 

        writeToScreen(“CONNECTED”); 

        doSend(“WebSocket rocks”); 

    }  

 

    function onClose(evt) { 

        writeToScreen(“DISCONNECTED”); 

    }  

 

    function onMessage(evt) { 

        writeToScreen(‘span style=”color: blue;”RESPONSE: ‘+ evt.data+’/span’); 

        websocket.close(); 

    }  

 

    function onError(evt) { 

        writeToScreen(‘span style=”color: red;”ERROR:/span ‘+ evt.data); 

    }  

 

    function doSend(message) { 

        writeToScreen(“SENT: ” + message);  

        websocket.send(message); 

    }  

 

    function writeToScreen(message) { 

        var pre = document.createElement(“p”); 

        pre.style.wordWrap = “break-word”; 

        pre.innerHTML = message; 

        output.appendChild(pre); 

    }  

 

    window.addEventListener(“load”, init, false);  

/script  

h2WebSocket Test/h2  

div id=”output”/div  

/html

原創文章,作者:ZLZX,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/139352.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
ZLZX的頭像ZLZX
上一篇 2024-10-04 00:22
下一篇 2024-10-04 00:22

相關推薦

  • JS Proxy(array)用法介紹

    JS Proxy(array)可以說是ES6中非常重要的一個特性,它可以代理一個數組,監聽數據變化並進行攔截、處理。在實際開發中,使用Proxy(array)可以方便地實現數據的監…

    編程 2025-04-29
  • 使用Netzob進行網路協議分析

    Netzob是一款開源的網路協議分析工具。它提供了一套完整的協議分析框架,可以支持多種數據格式的解析和可視化,方便用戶對協議數據進行分析和定製。本文將從多個方面對Netzob進行詳…

    編程 2025-04-29
  • 解析js base64並轉成unit

    本文將從多個方面詳細介紹js中如何解析base64編碼並轉成unit格式。 一、base64編碼解析 在JavaScript中解析base64編碼可以使用atob()函數,它會將b…

    編程 2025-04-29
  • Node.js使用Body-Parser處理HTTP POST請求時,特殊字元無法返回的解決方法

    本文將解決Node.js使用Body-Parser處理HTTP POST請求時,特殊字元無法返回的問題。同時,給出一些相關示例代碼,以幫助讀者更好的理解並處理這個問題。 一、問題解…

    編程 2025-04-29
  • 微軟發布的網路操作系統

    微軟發布的網路操作系統指的是Windows Server操作系統及其相關產品,它們被廣泛應用於企業級雲計算、資料庫管理、虛擬化、網路安全等領域。下面將從多個方面對微軟發布的網路操作…

    編程 2025-04-28
  • t3.js:一個全能的JavaScript動態文本替換工具

    t3.js是一個非常流行的JavaScript動態文本替換工具,它是一個輕量級庫,能夠很容易地實現文本內容的遞增、遞減、替換、切換以及其他各種操作。在本文中,我們將從多個方面探討t…

    編程 2025-04-28
  • 蔣介石的人際網路

    本文將從多個方面對蔣介石的人際網路進行詳細闡述,包括其對政治局勢的影響、與他人的關係、以及其在歷史上的地位。 一、蔣介石的政治影響 蔣介石是中國現代歷史上最具有政治影響力的人物之一…

    編程 2025-04-28
  • 基於tcifs的網路文件共享實現

    tcifs是一種基於TCP/IP協議的文件系統,可以被視為是SMB網路文件共享協議的衍生版本。作為一種開源協議,tcifs在Linux系統中得到廣泛應用,可以實現在不同設備之間的文…

    編程 2025-04-28
  • 解析Azkaban API Flow執行結果

    本文將從多個方面對Azkaban API Flow執行結果進行詳細闡述 一、Flow執行結果的返回值 在調用Azkaban API的時候,我們一般都會通過HTTP請求獲取Flow執…

    編程 2025-04-27
  • JS圖片沿著SVG路徑移動實現方法

    本文將為大家詳細介紹如何使用JS實現圖片沿著SVG路徑移動的效果,包括路徑製作、路徑效果、以及實現代碼等內容。 一、路徑製作 路徑的製作,我們需要使用到SVG,SVG是可縮放矢量圖…

    編程 2025-04-27

發表回復

登錄後才能評論