b/s與c/s模式

<b/s與c/s

在網絡軟件開發中,經常會提到b/s模式與c/s模式。兩種模式代表了兩種不同的軟件架構。下面我們將從不同的角度進行闡述。

一、基本概念

b/s模式

b/s模式即瀏覽器/服務器模式,是通過瀏覽器對Web服務器提交請求,Web服務器接收請求並處理並返回結果,瀏覽器解析結果並呈現給用戶。


//b/s模式示例代碼
<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>Hello World!</title>
</head>
<body>
  <h1>Hello World!</h1>
  <p>這是一份經典的Hello World程序,通過瀏覽器請求Hello World服務器,服務器返回Hello World進行解析呈現給用戶。</p>
</body>
</html>

c/s模式

c/s模式即客戶端/服務器模式,是指在計算機領域中可以將系統分成服務端和客戶端兩部分,服務端提供數據服務,客戶端對服務端發出請求,並接收服務器端的數據,然後對其進行操作和處理。


//c/s模式示例代碼
//服務端
import socket

server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(('localhost', 8888))
server.listen()

while True:
    conn, address = server.accept()
    print(f'Connection from {address} has been established!')

    conn.send(bytes('Welcome to the server!', 'utf-8'))
    conn.close()
//客戶端
import socket

client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect(('localhost', 8888))

message = client.recv(1024)

print(message.decode('utf-8'))
client.close()

二、優缺點比較

b/s模式

b/s模式的優勢在於無需下載任何軟件就可以直接使用,界面友好、易於操作,廣泛應用於各種網站。但缺點也很明顯,多人同時訪問時經常會出現堵塞,同時也存在安全性、可擴展性等問題。

c/s模式

c/s模式的強大之處在於可以脫離瀏覽器的限制,更為靈活自由,同時可以充分利用計算機資源,客戶端也可以對數據進行本地處理,在數據傳輸、安全性方面也比較完善。但缺點是需要客戶端軟件的支持,且運行環境多樣,存在着兼容性問題。

三、案例分析

b/s模式案例

以網上購物為例,b/s模式可以通過大型購物平台引導消費者進入網站,消費者可以在平台上瀏覽和購買商品。根據消費者的數據請求,購物平台服務器相應的返回數據並進行處理,消費者接收到平台的響應信息後,進行操作界面進行操作。


//網上購物b/s模式代碼示例
<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>購物平台</title>
</head>
<body>
  <h1>歡迎來到購物平台!</h1>
  <p>請在下方選擇想要購買的商品:</p>
  <form action="shopping.php" method="post">
    <input type="checkbox" name="product" value="apple">蘋果:5元/個
    <br>
    <input type="checkbox" name="product" value="banana">香蕉:3元/個
    <br>
    <input type="checkbox" name="product" value="orange">橙子:4元/個
    <br>
    <input type="submit" value="提交">
  </form>
  <p>已選商品:<span id="result"></span></p>
  <script>
    function showResult(){
      let result = "";
      let checkboxes = document.getElementsByName("product");
      for(let i=0; i<checkboxes.length; i++){
        if(checkboxes[i].checked===true){
          result += checkboxes[i].value + " ";
        }
      }
      document.getElementById("result").innerHTML = result;
    }
    showResult();
  </script>
</body>
</html>

c/s模式案例

以在線遊戲為例,c/s模式可以通過客戶端軟件與服務端建立連接,客戶端可以獲取服務端實時更新的遊戲狀態數據,並進行相應的操作和處理。在客戶端上還可以進行一系列操作和處理,例如聊天、好友、遊戲記錄等等。


//在線遊戲c/s模式代碼示例
//服務端
import socket

server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(('localhost', 8888))
server.listen()

games = {
    '1001': {
        'player1': {'pos_x': 0, 'pos_y': 0},
        'player2': {'pos_x': 100, 'pos_y': 100}
    }
}

def clientThread(conn, address, game_id):
    game = games[game_id]
    player = ''
    for k, v in game.items():
        if not v:
            game[k] = {'address': address, 'conn': conn}
            player = k
            break
    conn.send(bytes(f'{player} {game[player^1]["address"][0]} {game[player^1]["address"][1]}', 'utf-8'))
    while True:
        data = conn.recv(1024)
        if not data:
            break
        player_data = data.decode().split(" ")
        game[player]['pos_x'] = int(player_data[1])
        game[player]['pos_y'] = int(player_data[2])
        conn.sendall(bytes(f'{game[player^1]["pos_x"]} {game[player^1]["pos_y"]}', 'utf-8'))
    game[player] = {}

while True:
    conn, address = server.accept()
    game_id = conn.recv(1024).decode()
    thread = threading.Thread(target=clientThread, args=(conn, address, game_id))
    thread.start()
//客戶端
import socket

class player:
    def __init__(self, pos_x=0, pos_y=0):
        self.pos_x = pos_x
        self.pos_y = pos_y

    def update_pos(self, pos_x, pos_y):
        self.pos_x = pos_x
        self.pos_y = pos_y

    def get_pos(self):
        return (self.pos_x, self.pos_y)

client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect(('localhost', 8888))

player1 = player()
player2 = player()

def send_position(player):
    input("回車開始移動")
    print("移動方向鍵盤上下左右,q退出")
    while True:
        if keyboard.is_pressed('q'):
            break
        if keyboard.is_pressed('up'):
            player.pos_y -= 10
        if keyboard.is_pressed('down'):
            player.pos_y += 10
        if keyboard.is_pressed('left'):
            player.pos_x -= 10
        if keyboard.is_pressed('right'):
            player.pos_x += 10
        data = f'{player.get_pos()[0]} {player.get_pos()[1]}'
        client.send(bytes(data, 'utf-8'))
        data = client.recv(1024).decode().split(" ")
        player2.update_pos(int(data[0]), int(data[1]))

if __name__ == "__main__":
    #選擇遊戲房間
    game_id = input("請輸入遊戲房間號:")

    #啟動線程
    t1 = threading.Thread(target=send_position, args=(player1,))
    t2 = threading.Thread(target=send_position, args=(player2,))
    t1.start()
    t2.start()
    t1.join()
    t2.join()

    client.close()

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

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
PPQSF的頭像PPQSF
上一篇 2025-04-13 11:45
下一篇 2025-04-13 11:45

相關推薦

  • 手機安全模式怎麼解除?

    安全模式是一種手機自身的保護模式,它會禁用第三方應用程序並使用僅限基本系統功能。但有時候,安全模式會使你無法使用手機上的一些重要功能。如果你想解除手機安全模式,可以嘗試以下方法: …

    編程 2025-04-28
  • Qt State Machine與狀態機模式

    本文將介紹Qt State Machine和狀態機模式在Qt中的實現。Qt提供了QStateMachine和QState兩個類,可以方便地實現狀態機模式,並且能有效地處理複雜的、多…

    編程 2025-04-27
  • 顯示C++設計模式

    本文將詳細介紹顯示C++設計模式的概念、類型、優點和代碼實現。 一、概念 C++設計模式是在軟件設計階段定義,用於處理常見問題的可重用解決方案。這些解決方案是經過測試和驗證的,並已…

    編程 2025-04-27
  • Centos7進入單用戶模式的解釋

    本文將介紹如何在Centos7中進入單用戶模式,並從以下幾個方面進行詳細的闡述。 一、Centos7進入單用戶模式的解答 在Centos7中進入單用戶模式需要執行以下步驟: 1. …

    編程 2025-04-27
  • 深入解析PSM模式

    一、PSM模式是什麼 PSM模式,即頁面-狀態-模型模式,是一種前端開發模式。它以頁面為中心,將頁面內的所有狀態和業務邏輯抽象成一個由頁面轉化而來的虛擬狀態機模型,從而將業務邏輯與…

    編程 2025-04-25
  • 授權碼模式與OAuth2.0

    一、什麼是授權碼模式 授權碼模式(Authorization Code Grant Type)是OAuth2.0協議中最常用的授權方式之一,也是最為安全的一種授權方式。授權碼模式的…

    編程 2025-04-24
  • 從多個方面詳細闡述MVC模式和三層架構

    一、MVC模式 MVC是Model-View-Controller的縮寫,是一種應用於軟件工程的設計模式。MVC模式將一個軟件應用分為三個基本部分:模型(Model)、視圖(Vie…

    編程 2025-04-24
  • 暗黑模式的盛行

    一、背景和定義 暗黑模式起源於智能手錶和夜視儀等專業設備上的配色方案,是指採用黑底白字、暗灰底白字等相對較暗的背景色搭配亮色前景,以減少屏幕對用戶眼睛的刺激,降低視覺疲勞感。這種設…

    編程 2025-04-24
  • 谷歌瀏覽器深色模式

    一、深色模式的概念 深色模式是一種日益流行的 UI 設計趨勢,通過使用暗灰色或黑色背景,大大降低了屏幕的亮度,更加舒適和護眼。深色模式也被稱為暗黑模式。 谷歌瀏覽器深色模式的推出可…

    編程 2025-04-24
  • 單例模式的作用

    一、概念解釋 1、單例模式是指一個類只允許存在一個實例對象,且該對象能被系統中其他模塊所共用。該模式主要解決了全局變量的問題,在同一時間只有一個實例被使用,避免了多次重複實例化造成…

    編程 2025-04-23

發表回復

登錄後才能評論