WebSocket服務端的詳細闡述

WebSocket是一種在單個 TCP 連接上進行全雙工通信的協議。 它使得實時和非同步應用程序成為可能。WebSocket最初是通過瀏覽器使用的,但現在它也被應用於伺服器端。在本文中,我們將重點介紹WebSocket服務端方面的內容。

一、WebSocket服務端工具

WebSocket服務端的工具有多種選擇,比如PHP、Node.js等。這些工具都提供了WebSocket的庫和API。例如,Node.js的庫「ws」可以輕鬆地創建WebSocket伺服器。這是一份使用Node.js的代碼示例:

const WebSocket = require('ws');
const server = new WebSocket.Server({ port: 8080 });

server.on('connection', (ws) => {
  ws.send('Hello, client!');
  
  ws.on('message', (message) => {
    console.log(`Received message: ${message}`);
  });
});

這個代碼片段創建了一個WebSocket伺服器,並在客戶端連接時向客戶端發送一條消息。當客戶端發送消息時,它將被列印到控制台上。

二、WebSocket服務端路徑錯誤

WebSocket服務端的路徑是一個非常重要的問題。如果路徑錯誤,客戶端就無法連接到伺服器。默認的路徑是「/」。如果需要修改路徑,需要在伺服器上設置。以下是一個使用PHP創建WebSocket伺服器的示例:

$server = new swoole_websocket_server('127.0.0.1', 9501);
$server->on('open', function (swoole_websocket_server $server, $request) {
    echo "server: handshake success with fd{$request->fd}\n";
});

$server->on('message', function (swoole_websocket_server $server, $frame) {
    echo "receive from {$frame->fd}:{$frame->data},opcode:{$frame->opcode},fin:{$frame->finish}\n";
    $server->push($frame->fd, "this is server");
});

$server->on('close', function ($ser, $fd) {
    echo "client {$fd} closed\n";
});

$server->start();

為了修改路徑,可以在「new swoole_websocket_server()」中傳遞參數來添加路徑。例如,可以使用「$server = new swoole_websocket_server(‘127.0.0.1’, 9501, SWOOLE_PROCESS, SWOOLE_SOCK_TCP | SWOOLE_SSL);」來指定路徑為「127.0.0.1:9501」。

三、WebSocket服務端加密

WebSocket通過TLS / SSL保護客戶端和伺服器之間的通信。它使用Secure Sockets Layer(SSL)或TLS(Transport Layer Security)來加密數據並確保數據不被劫持。以下是一個使用Node.js的示例:

const https = require('https');
const WebSocket = require('ws');
const fs = require('fs');

const server = https.createServer({
    cert: fs.readFileSync(''),
    key: fs.readFileSync('')
});

const wss = new WebSocket.Server({ server });

wss.on('connection', (ws) => {
  ws.send('Hello, client!');

  ws.on('message', (message) => {
    console.log(`Received message: ${message}`);
  });
});

server.listen(8080);

在這個例子中,我們先創建了一個使用HTTPS協議的伺服器,然後創建了一個WebSocket伺服器。我們使用了TLS / SSL保護數據。

四、WebSocket伺服器

WebSocket伺服器是可以讓客戶端和伺服器之間進行實時通信的服務。WebSocket伺服器可以使用不同的編程語言來實現。這個例子使用Python創建伺服器:

#!/usr/bin/env python

import asyncio
import websockets

async def hello(websocket, path):
    name = await websocket.recv()
    print(f" {greeting}")

start_server = websockets.serve(hello, "localhost", 8765)

asyncio.get_event_loop().run_until_complete(start_server)
asyncio.get_event_loop().run_forever()

這個例子創建了一個WebSocket伺服器,當客戶端連接時,它會發送一條問候消息並等待客戶端的響應。然後,它會將收到的響應列印到控制台上。

五、WebSocket服務端搭建

我們可以使用不同的編程語言來搭建WebSocket服務端。以下是一個使用Java的例子:

@ServerEndpoint("/echo")
public class EchoServer {

    @OnOpen
    public void onOpen(Session session) {
        System.out.println("onOpen");
        try {
            session.getBasicRemote().sendText("Hello, client!");
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }

    @OnMessage
    public void onMessage(Session session, String message) {
        System.out.println("onMessage: " + message);
    }

    @OnClose
    public void onClose(Session session) {
        System.out.println("onClose");
    }
}

這個例子使用Java的WebSocket API來搭建服務端。服務端接收到一個連接請求時,會向客戶端發出問候消息,並等待客戶端的響應。一旦收到響應,就會將其列印到控制台上。

六、WebSocket服務端設置

為了使WebSocket伺服器正常工作,我們需要設置一些參數。以下是一個使用Python的示例:

#!/usr/bin/env python

import asyncio
import websockets
import ssl

ssl_context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
ssl_context.load_cert_chain('', '')

async def hello(websocket, path):
    name = await websocket.recv()
    print(f" {greeting}")

start_server = websockets.serve(hello, "localhost", 8765, ssl=ssl_context)

asyncio.get_event_loop().run_until_complete(start_server)
asyncio.get_event_loop().run_forever()

在這個例子中,我們使用Python的「ssl」模塊來設置SSL上下文。我們還使用了用戶名和密碼來保護WebSocket伺服器。

七、WebSocket服務端和客戶端

為了測試WebSocket伺服器,我們需要編寫WebSocket客戶端。以下是一個使用Java的WebSocket客戶端示例:

@ClientEndpoint
public class EchoClient {

    @OnOpen
    public void onOpen(Session session) {
        System.out.println("onOpen");
        try {
            session.getBasicRemote().sendText("Hello, server!");
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }

    @OnMessage
    public void onMessage(Session session, String message) {
        System.out.println("onMessage: " + message);
    }

    @OnClose
    public void onClose(Session session) {
        System.out.println("onClose");
    }
}

這個例子創建了一個WebSocket客戶端,當它連接到伺服器時,它會向伺服器發送一條問候消息,並等待伺服器的響應。一旦收到響應,就會將其列印到控制台上。

八、WebSocket服務端什麼協議

WebSocket使用HTTP / 1.1協議升級到WebSocket協議。這個過程被稱為「握手」,它允許客戶端和伺服器協商WebSocket支持。以下是一個使用Node.js的示例:

const http = require('http');
const WebSocket = require('ws');
const fs = require('fs');

const server = http.createServer((req, res) => {
  res.writeHead(200, { 'Content-Type': 'text/plain' });
  res.end('Hello, World!');
});

const wss = new WebSocket.Server({ server });

wss.on('connection', (ws) => {
  ws.send('Hello, client!');

  ws.on('message', (message) => {
    console.log(`Received message: ${message}`);
  });
});

server.listen(8080);

這個例子創建了一個HTTP伺服器。當客戶端連接時,它會向客戶端發送一條問候消息,並等待客戶端的響應。然後,它會將收到的響應列印到控制台上。

九、WebSocket服務端接收消息

WebSocket伺服器可以接收來自客戶端的消息。以下是一個使用PHP創建WebSocket伺服器的示例:

$server = new swoole_websocket_server('127.0.0.1', 9501);
$server->on('open', function (swoole_websocket_server $server, $request) {
    echo "server: handshake success with fd{$request->fd}\n";
});

$server->on('message', function (swoole_websocket_server $server, $frame) {
    echo "receive from {$frame->fd}:{$frame->data},opcode:{$frame->opcode},fin:{$frame->finish}\n";
    $server->push($frame->fd, "this is server");
});

$server->on('close', function ($ser, $fd) {
    echo "client {$fd} closed\n";
});

$server->start();

在這個例子中,當客戶端發送消息時,服務端會接收到並輸出到控制台上。

十、WebSocket服務端主動斷開連接

WebSocket伺服器可以在需要時關閉連接。以下是一個使用Node.js的示例:

const WebSocket = require('ws');
const server = new WebSocket.Server({ port: 8080 });

server.on('connection', (ws) => {
  ws.send('Hello, client!');

  setTimeout(() => {
      ws.close();
  }, 5000);
  
  ws.on('message', (message) => {
    console.log(`Received message: ${message}`);
  });
});

在這個例子中,WebSocket伺服器從客戶端接受一條消息,然後等待5秒鐘後關閉連接。

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

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-11-11 13:43
下一篇 2024-11-11 13:44

相關推薦

  • Boost Websocket Send用法介紹

    本文將詳細闡述Boost Websocket Send的相關內容,包括Boost Websocket Send的概念、使用方法、功能特點等,以便讀者深入了解和使用。 一、概述 Bo…

    編程 2025-04-27
  • index.html怎麼打開 – 詳細解析

    一、index.html怎麼打開看 1、如果你已經擁有了index.html文件,那麼你可以直接使用任何一個現代瀏覽器打開index.html文件,比如Google Chrome、…

    編程 2025-04-25
  • Resetful API的詳細闡述

    一、Resetful API簡介 Resetful(REpresentational State Transfer)是一種基於HTTP協議的Web API設計風格,它是一種輕量級的…

    編程 2025-04-25
  • AXI DMA的詳細闡述

    一、AXI DMA概述 AXI DMA是指Advanced eXtensible Interface Direct Memory Access,是Xilinx公司提供的基於AMBA…

    編程 2025-04-25
  • 關鍵路徑的詳細闡述

    關鍵路徑是項目管理中非常重要的一個概念,它通常指的是項目中最長的一條路徑,它決定了整個項目的完成時間。在這篇文章中,我們將從多個方面對關鍵路徑做詳細的闡述。 一、概念 關鍵路徑是指…

    編程 2025-04-25
  • neo4j菜鳥教程詳細闡述

    一、neo4j介紹 neo4j是一種圖形資料庫,以實現高效的圖操作為設計目標。neo4j使用圖形模型來存儲數據,數據的表述方式類似於實際世界中的網路。neo4j具有高效的讀和寫操作…

    編程 2025-04-25
  • c++ explicit的詳細闡述

    一、explicit的作用 在C++中,explicit關鍵字可以在構造函數聲明前加上,防止編譯器進行自動類型轉換,強制要求調用者必須強制類型轉換才能調用該函數,避免了將一個參數類…

    編程 2025-04-25
  • Unity WebSocket詳解

    一、WebSocket簡介 WebSocket是一種在單個TCP連接上進行全雙工通信的網路協議。WebSocket使用標準的HTTP埠(80)或安全埠(443),與HTTP協議…

    編程 2025-04-25
  • HTMLButton屬性及其詳細闡述

    一、button屬性介紹 button屬性是HTML5新增的屬性,表示指定文本框擁有可供點擊的按鈕。該屬性包括以下幾個取值: 按鈕文本 提交 重置 其中,type屬性表示按鈕類型,…

    編程 2025-04-25
  • crontab測試的詳細闡述

    一、crontab的概念 1、crontab是什麼:crontab是linux操作系統中實現定時任務的程序,它能夠定時執行與系統預設時間相符的指定任務。 2、crontab的使用場…

    編程 2025-04-25

發表回復

登錄後才能評論