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/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

发表回复

登录后才能评论