DELPHI基础教程:Delphi客户服务器应用开发(四)[2]

DELPHI基础教程:Delphi客户服务器应用开发(四)[2],第1张

CREATE TABLE EMPLOYEE (EMP_NO EMPNO NOT NULL

FIRST_NAME FIRSTNAME NOT NULL

LAST_NAME LASTNAME NOT NULL

PHONE_EXT VARCHAR( )

HIRE_DATE DATE DEFAULT NOW NOT NULL

DEPT_NO DEPTNO NOT NULL

JOB_CODE JOBCODE NOT NULL

JOB_GRADE JOBGRADE NOT NULL

JOB_COUNTRY COUNTRYNAME NOT NULL

SALARY SALARY NOT NULL

FULL_NAME PUTED BY (last_name || || first_name)

PRIMARY KEY (EMP_NO))

CHECK语句是给数据库字段取值范围加约束条件 PRIMARY_KEY语句是给表建立关键字索引

如法炮制 就可以定义IBLOCAL中的所有表

IBLOCAL中的表包括

EMPLOYEE CUSTOMER DEPARTMENT EMPLOYEE_PROJECT

PROJECT SALES SALARY_HISCORY

各数据库表中的内容如下

表 EmployeeDemoDB中各数据库表的内容

━━━━━━━━━━━━━━━━━━━━━━━━━━━

数据库表名        表中内容

───────────────────────────

EMPLOYEE 雇员信息

CUSTOMER 客户信息

DEPARTMENT 部门信息

EMPLOYEE_PROJECT 雇员负责的工程

PROJECT 工程信息

SALES 销售信息

SALARY_HISTORY 雇员薪水调整的历史信息

━━━━━━━━━━━━━━━━━━━━━━━━━━━

每个数据库表中都定义了关键字段 关于数据库表中的字段名 类型 大小 这里不再赘述

应用程序分析

TDatabase部件的使用

CSDEMO程序中定义了一个数据库模块部件 TDmEmployee 它是继承于TDataModule TDataModule是在Delphi 中才出现的专门放置数据访问部件(如TDatabase TTable和TQuery等)的框架 其它涉及数据库访问的窗体 只要在uses语句中插入数据库模块所在的库单元 该窗体上的数据库部件就可引用相应的数据库访问部件

在TDmEmployee中定义了一个TDatabase类型的部件──EmployeeDatabase EmployeeDatagase的主要属性及属性值如下

表 EmployeeDatabase部件主要属性的取值

━━━━━━━━━━━━━━━━━━━━━━━

属性        属性值

───────────────────────

AliasName IBLOCAL

DatabaseName EmployeeDemoDB

KeepConnection True

LoginPrompt False

TransIsolation tiReadCommitted

Params USERNAME = SYSDBA

PASSWORD = masterkey

Connected True

━━━━━━━━━━━━━━━━━━━━━━━

AliasName属性所指定的IBLOCAL 必须已经在BDE中配置好 DatabaseName属性指定要使用的数据库名 该数据库名是由应用程序自己定义的 因此不反应到BDE中 该属性值被TTable TQuery等DataSet部件引用 并且出现在DataSet部件的DatabaseName 下拉式列表框中 本例中的 EmployeeDemoDB 被EmployeeTable SalesTable等所有DataSet部件引用

Connected为True表明 应用程序与数据库将保持联接

KeepConnection属性为True 表明多次打开和关闭EmployeeDemoDB数据库中的任意表 应用程序将始终与数据库保持联接 这省却了重复注册的开销

LoginPrompt 属性为False 表明应用程序自动处理与数据库的联接注册 因此 Params属性中定义了注册的用户名和口令

USERNAME = SYSDBA

PASSWORD = masterkey

TransIsolation属性为tiReadCommitted表明 如果存在多个同时事务 则某一事务只允许读由其它事务提交了的数据

程序中EmployeeDatabase的应用还与事务控制等有关 下文中会介绍这方面的内容

不同数据库表的切换

在许多数据库应用中都要在不同数据库表之间相互切换 以响应用户输入条件或系统状态的变化 这时 往往需要特别的处理 例如改变光标形状或隐藏数据改变等 尤其是在客户/服务器应用程序中 因为是用SQL语句访问远程数据库 有时还要在服务器端执行计算任务 所以客户端的数据变化会有一定的间隔 因此应该让用户明白发生了什么 下面是CSDEMO在数据库表切换时的处理办法

procedure TFrmViewDemo ShowTable( ATable: string )

begin

Screen Cursor := crHourglass; { 向用户提示当前 *** 作状态 }

VaryingTable DisableControls; { 隐藏数据变化 }

VaryingTable Active := FALSE; { 关闭原来的数据库表 }

VaryingTable TableName := ATable; { 更新数据库表名 }

VaryingTable Open; { 打开数据库表 }

VaryingTable EnableControls; { 显示所作的修改 }

Screen Cursor := crDefault; { 重新设置光标形状 }

end;

crHourglass型光标表明正在执行SQL查询 DisableControls和EnableControls的作用是隐藏和显示数据变化

InterBase触发器(Trigger)的应用

在CSDEMO应用程序中 演示触发器应用的窗体是TFromTriggerDemo;

在该窗体中包含两个TDBGrid对象 DBGrid 显示EmployeeTable中的数据 DBGrid 显示SalaryHistoryTable中的数据 它们的主要属性及属性值如下

表 EmlpoyeeTable部件主要属性的取值

━━━━━━━━━━━━━━━━━━━━━

属 性       属 性 值

─────────────────────

DatabaseName EmployeeDemoDB

IndexFieldName Emp_No

TableName EMPLOYEE

━━━━━━━━━━━━━━━━━━━━━

表 SalaryHistoryTable部件主要属性的取值

━━━━━━━━━━━━━━━━━━━━━

属 性       属 性 表

─────────────────────

DatabaseName EmployeeDemoDB

IndexFieldName Emp_No

MasterFields Emp_No

MasterSource EmployeeSource

TableName SALARY_HISTORY

━━━━━━━━━━━━━━━━━━━━━

这两个表之间存在两种关系

● 连接关系

EmployeeTable的记录变化时 SalaryHistoryTable的数据要作相应的变化 这种连接关系是通过索引来实现的

● 数据一致性

对EmployeeTable中的Salary字段的值作修改必须反映到SalaryHistoryTable中 SalaryHistoryTable维护的是Salary变化的历史信息 这种数据一致性要求在本程序中是通过触发器实现的

触发器是在SQL服务器端执行的一段程序 它在服务器端被触发执行完成一定的数据计算任务

下面是InterBase服务器上与Employee表相关的触发器程序

Triggers on Table EMPLOYEE:

SAVE_SALARY_CHANGE Sequence: Type: AFTER UPDATE Active AS

BEGIN

IF (old salary <> new salary) THEN

INSERT INTO salary_history

(emp_no change_date updater_id old_salary percent_change)

VALUES (

old emp_no

now

user

old salary

(new salary old salary) / old salary)

END

因为触发器是相应于EMPLOYEE表上的数据修改由服务器自动触发执行的 所以在客户应用程序上没有显式的调用 在客户端有打开并显示数据库表内容的程序和当SALARY_HISTORY表中数据变化时的更新显示的 *** 作

lishixinzhi/Article/program/Delphi/201311/25126

强烈推荐使用宝塔:

宝塔Linux面板是提升运维效率的服务器管理软件,支持一键LAMP/LNMP/集群/监控/网站/FTP/数据库/JAVA等100多项服务器管理功能。

很多繁琐功能一键 *** 作

如你是极客爱好者

宝塔一键部署功能有很多程序,例如网盘,表白墙,问答系统,论坛

第三方应用市场有frp服务端,客户端抛去复杂的配置,全在图形界面下配置frp内网穿透

并且第三方应用和一键部署功能内容会越来越多

如果你是web开发者或者网站运维

宝塔的一键安装lamp,lnmp,可选版本,极速安装或者编译安装

还有简单的 *** 作去备份数据库,备份网站,备份到ftp,百度网盘,阿里云oss等

gitsvn等自动部署功能,tply框架一键拉取

等多个强大便捷的功能

具体可以到宝塔官网看介绍,支持Windows系统以及大部分发行版Linux系统

云服务器的带宽限制是设置在网卡上的,采用对称方式限制,即上传和下载的带宽限制是一样的。云服务器被访问时,在限制范围内,提供最大的上传和下载服务,以下情况会影响下载速度。
1网络影响:用户所在公网与云主机之间存在瓶颈,例如云主机购买带宽为10Mbps,用户本地上网带宽20Mbps,但公网上的任何一个节点低于10Mbps,则下载速度无法达到10Mbps;
2服务器CPU、内存、磁盘I/O等因素影响:如果系统本身负载很大,会影响整个系统的各种服务速度,网站访问速度同样会受影响。因此当网站访问慢时,需要评估是否存在小马拉大车的情况,及时优化系统负载,或增加系统配置提高系统性能都是需要考虑的。
我们只需要根据自己的实际情况选择适合自己的云服务器带宽就可以了。

一、腾讯把服务器装进山洞

腾讯贵安七星数据中心,建在贵州省贵安新区两座山的山体上,是要存放30万台服务器的灾备数据中心。整个数据中心总占地面积约为47万平方米,隧洞的面积超过3万平方米,能塞下4个标准足球场还有富余。

腾讯方面透露,利用山洞建数据中心,主要出于两方面考虑。

一是山洞结构可以散热。山洞特殊的结构,就像一个巨大的空调。山洞外的冷空气从主洞口进入,经过制冷模块与IT设备热回风进行间接换热后,从竖井排出。这样既可以充分利用外部自然冷源,又避免了外界空气对设备的影响。

更主要的是安全。腾讯称,贵安七星数据中心是参照我国高等级人防标准建设,具备突发防护能力,可防相应级别常规打击和核打击。发生突发事件时,它将自动切换到防护模式不间断运行。(来~UPS了解一下)

而且利用最新AI技术,该数据中心还能实现网络、主机、业务3级云安全布防,人脸识别、安防机器人等均被应用其中,此外腾讯还在计划部署无人机入侵防控系统。

二、微软把数据中心建到海底的项目

在人们对网络和计算的需求呈指数级增长的今天,已有的数据中心已经无法满足人们生产、生活的需要。因此微软在2014年开启了代号为“Natick”的海底数据中心项目,旨在满足世界人口密集区域对云计算基础设施的大量需求。

微软宣布,在苏格兰奥克尼群岛附近的一片海域,一个集装箱大小的海底数据中心已经开始运转。

在云计算中,数据中心担任着不可取代的角色,为了降低运营数据中心带来的大量能耗,微软于2014年开启了Natick项目, 探索 在深海底部建立数据中心的可能。如今这个项目已经进入了第二阶段,微软尝试运用潜艇技术和可再生能源开发新型海底数据中心,为沿海城市提供高速度、低能耗的云服务。

海底数据中心的想法最初是在2013年的微软的年度创新活动“ThinkWeek”中提出的,希望可以利用海水冷却服务器达到降低能耗的目的。

除此之外,这个项目还具有多重优势,世界上有一半以上的人口生活在距离海岸约193公里以内的区域,将数据中心部署在沿海城市的附近水域可以极大地缩短数据与用户的距离,使得网速提升,沿海居民打 游戏 、看视频的流畅度相应提升。

最重要的是,还能加快AI任务,使AI驱动技术能够为人们营造更加流畅、真实的用户体验,满足人口密集区域对云计算基础设施的大量需求。

经过了105天在海底的平稳运行,原型机在可行性上验证了海底数据中心的设想。Natick项目团队深受鼓舞,开始了项目的下一阶段,尝试在苏格兰附近的欧洲海洋能源中心部署一个完整的、五年免维护的数据中心。

海底数据中心可以借助大洋深处提供的不间断免费冷却系统节省大量的成本,同时还可以促进海上风力发电场、潮汐涡轮机组等海洋可再生能源行业的共同发展。

三、阿里巴巴把服务器泡进“水里”

阿里的工程师研发出了液冷服务器技术。

他们把服务器“泡在水里”——这是一种极其高效的散热方式:浸没式液冷。服务器被浸泡在特殊冷却液里,产生热量可被冷却液直接带走进入外循环,全程用于散热的能耗几乎为零,整体节能70%。

这个问题,可以跟大家科普一下。服务器里放的是什么?是数据,数据最重要的是安全性,那么那么多大批量的服务器运行,会有什么效果?服务器是全天 24 小时不停的在运行,会释放大量的热,上万台服务器在一起,得释放多少热量,是不是很费电?
在正式回答问题之前,给大家看段视频,长长见识。
山洞是阴凉的,一般数据中心都建在贵州的大山洞里,因为贵州的温度也比较低,又加上山洞阴凉,有利于服务器的散热,贵州的电费也低,省钱。放到山洞或者水里,本身就有利于降温,本身就容易散热,这样对于一些通风散热设备来讲,可以使用的少一些,这样就少运行一些散热设备,也省电,省钱,省成本。
其实放到山洞里,也有利于安全性,山洞本身都是比较坚固的,安全性比较容易保障,其实放到水里在降温层面来讲肯定是比放到山洞里更好,但是放到水里那就要求密封性比较好,在安全性的考虑上就不如放到山洞里。放到水里在降温省电方面,能够节省成本,但是在安全保障方面,可能要特殊处理,成本就会上去。
总之,是各有特色。
最后解释一下服务器,其实放数据的地方,运行的服务器说白了就是电脑的主机。大家在软件上的数据,互联网上的数据都存放在了服务器里,也就是电脑主机里,成千上万台的服务器组合在一起,运行着大家的数据。另外,数据都是有备份的,分布式存的,比如:在上海存放的数据,可能在贵州有备份,一旦上海的服务器有问题,被炸毁了,那么就会启用贵州备份的数据。所以,一般服务器的数据都是有保障的,不会丢失。

随着云概念的兴起服务器在现在 科技 领域占比已经越来越重要的了,虽然用户在使用的时候是看不见服务器存在的,但是组为运营者却需要考虑实际服务器的如何存放以及如何才能节省的成本的运行,由于服务器本身的属性功率高而且发热量也大,所以能够存储服务器要求必须是低温的地方,未来的大数据以及人工智能的发展都离不开服务器的存在,于是国家响应 科技 发展的大趋势就找到一块非常适合存放服务器的地方,就是贵州省目前大多数的互联网企业基本都在贵州有自己的数据中心,像腾讯华为,都给自己在贵州找到了存放服务器的地盘,贵州是天然的存放服务器最佳的地点,首先贵州的气温整体偏低非常适合存放服务器,同时由于国家政策的倾向在贵州的电费也是非常低。

正是由于拥有如此多的优势国内很多互联网企业纷纷跑向贵州给自己的服务器找个窝,对于集群的服务器来讲最重要的散热能力,撒热不好消费的电费也高对于机器的寿命也是一种考验。所以为了解决服务器散热的问题,已经有很多公司做过试验,国内放在贵州的服务器地点基本上是选择在山洞里面,这样的能够达到极好的散热效果,有能力的企业基本上买下几座山然后把山内部挖空然后在里面放置服务器,如果是散热好的服务器只是在电费这一块就把修建的费用非节省出来了,加上当地政府的政策电费本身就比较低,所以在贵州设置数据中心是一个非常值得做的事情。

当然也有很多企业尝试别的方案,像微软的服务器放置在海底,由于海底的温度更低所以也是放置服务器的绝好位置,但是放在海底需要保证服务器的密封性,总之在效果上要优于山洞中但是在安全性能的保障上可能要比在山上花费的成本要高一些,当然放置在海底还有几项优势,可以充分利用海浪来发电,这样还能节省电力的成本,另外微软放置在海底的服务器可不仅仅只是在一个地方,因为美国很多发达的区域都靠海,所以靠近用户能够提供更好的用户体验,不过国内的互联网公司还是倾向于在山洞中放置服务器。

未来服务器的重要性还会继续加强,所以特别 云计算的发展很多中小企业已经不是自己在设置自己的服务器了直接在大公司的云计算体系里面租借一个服务器维护自己的云计算功能,省钱还能省心毕竟服务器的安全维护都是交给大企业去做了,国内从事云计算的企业不在少数,当然最强还是阿里巴巴的阿里云,属于自主研发的在全球已经能够排到前四的位置,并且和谷歌的云计算市场占比差距很小,人工智能也是未来的一个发展趋势但是背后的数据计算依然会放在服务器去完成。

未来可能还会有更多的存储服务器的方式进化出来,但是存放服务器的首要条件是散热能力,要不然几万个服务器同时堆积在一起热量将是非常巨大的,而且电费的费用也会非常大,未来随着技术的成熟相信会有更加 科技 化的存储方式产生,但无论怎么折腾首先要考虑的都是散热问题,希望能帮到你

第一个是散热问题,电子元器件在电流通过的时候都会产生热量,尤其是CPU,大量的服务器聚集在一起长期工作会产生大量热量致使服务器温度升高,服务器过热就要降温,这就跟平时我们玩电脑一样,有的公司把服务器放在了南极,有的花费了巨额的代价来买空调,但是这些成本太大,实在有些浪费了,服务器选择放在海底,可以利用冰冷的海水来为服务器散热,而同时又能利用海浪来发电,为数据中心提供电量,从而降低维护成本。放在山洞同样是为了利用山洞的低温环境来给服务器降温,降低维护成本。

第二个是房租问题,数据中心往往占地面积比较大,比如腾讯贵安七星数据中心,建在贵州省贵安新区两座山的山体上,存放30万台服务器的灾备数据中心。整个数据中心总占地面积约为47万平方米,隧洞的面积超过3万平方米,能塞下4个标准足球场还有富余。这么大的面积在城市房租也是很贵的。

放在水里是因为省钱+降温。

服务器/电脑发热是很严重的问题,长时间高温高负荷运作会影响服务器寿命,因此需要降温。而一般的风冷降温用风扇噪音大且耗电。大的服务器群用在降温上的电费是很高的,因此很多厂商会把服务器建到水厂电厂旁边,原因就是电费便宜。

如果服务器放到水里就省去了散热电费成本。

我猜想放山洞是因为山洞基础温度低,散热所要降的温度差小,这样用一些节能的散热方案也是可以行的。

[灵光一闪]

服务器会产生大量的热量,为了节约成本便于散热,所以会考虑讲服务器放下水下或者山洞里。

例如前段时间,微软公司就成功地苏格兰奥克群岛的海岸附近,安装了一个水下数据中心的原型。实际上,数据中心里的耗电量很大一部分是用来散热的,而用于服务器计算的能耗只占约15%,所以很多大型 科技 公司都想尽办法降低数据中心的散热降温成本。

将数据中心搬到海里是目前成本较低又有效的方法,微软水下数据中心Project Natick的方向是用冰冷的海水来为服务器散热,而同时又能利用海浪来发电,为数据中心提供电量。

阿里云服务器放在千岛湖湖底,腾讯将服务器搬到贵州山洞里,都是为了降低散热成本。

服务区属于24小时全年运行配备,电器设备运行都有自发热,放在深山,水中能降低设备发热,发烫,从而提高设备运行,

水里和山洞里可以更有效的进行散热,服务器平时最大的问题就是散热,散热还不能用空调,空调有冷凝,会伤害电子元器件,普通的服务器机房只能风冷,噪音大,维护麻烦

谁说的服务器放水里?那还不短路了?阿里是把它们放在一种特制溶液里,那可不是水啊。

不管放在哪,目的是找一个温度较低的地方,省空调电呀。

主要是降温,安全,节约能源。

普通服务器(PvE服务器):没有野外PK。在中立区域,玩家不会受到敌对玩家的攻击,除非自己手动打开PvP开关。

PvP服务器:有野外PK。在中立区域,玩家可以自由攻击敌对玩家。

RP服务器:玩家要执行更加严格的角色扮演。玩家的言行要像是一个奇幻世界人物,而不能使用现实世界的词语或者说话方式。

PvE意思是Player(玩家) VS Environment(环境),重在体味游戏本身的故事和挑战,PvP意思是Player vs Player,重在参与玩家之间的对抗。

魔兽中的地图绝大部分都分为联盟领地、部落领地、中立地区(争夺中的领土)。到达某处地图,屏幕上方中央会显示地图名称,以及该地图隶属于哪一方,绿色字体表示己方领地,红色表示对方领地,**表示中立区域。这些信息消失后在小地图和大地图都可以继续查看领地信息。

无论PvP还是PvE服,在己方领地PvP状态默认关闭,不会受到敌对玩家的攻击,除非你自己打开PvP开关(右键头像列表打开PvP开关、对话框输入/PvP命令、攻击敌方玩家、攻击敌方阵营某些NPC比如守卫);无论PvP还是PvE服,在敌方领地PvP状态强制打开,敌方玩家可以主动攻击你。

区别就在于中立区域,在PvE服务器进入中立区域,PvP开关仍保持关闭,与在己方领地一样;在PvP服务器一进入中立区域,PvP开关强制打开。即是说,在PvE服务器,中立领地与己方领地一样安全;在PvP服务器,中立领地与敌方领地一样危险。

由于魔兽当中己方领地仅包含主城与新手村所在地图,除此之外还有少量的安全区(沙塔斯达拉然银白联赛领地等等)与竞技场区域,其余绝大部分地区都是中立领地。因此大致可以这样说:在PvP服务器,只要你不窝在家里不出门,不管你乐意不乐意,对方都可以PK你;而在PvE服务器,只要你不去对方家里浪,只要你不乐意,对方就算和你有不共戴天之仇,也拿你没办法。

PvE服玩家的游戏乐趣更倾向于做任务体味魔兽的世界观和剧情、推倒强大的团本Boss之类。在普通服务器上,玩家可以更好地体验《魔兽世界》的PvE内容而不受任何干扰。在PvE服,你不会像PvP服那样,一个经典长任务链做到一半,正全身心跟着剧情走、沉迷其中无法自拔、急于观看后续剧情,忽然不知从哪冲出来一个敌对阵营的小队,把你群殴瞬秒,甚至之后还长时间你蹲尸;也不会像PvP服那样团本时要去副本集合了,发现好不巧敌对盟的三四个团在门口集合堵门,然后就开始漫长的拖尸,这时你看到法爷冰箱闪现两次就进去了,战士冲锋拦截解恐惧两次就进去了,小德和贼一起静悄悄进去了,骑士无敌大摇大摆进去了,然后你作为一个可怜的牧师,每次就要摸到副本门口了,就被人恐惧出去了,死得大老远,重复十几次都进不去本,全团都在等你,又不能虚弱,虚弱了相当长时间内你在本里就失去了作用,想求术士拉你进去,发现术士正跟你一起拖尸呢。

但当然的,PvE服也缺少了玩家之间的遭遇战与集体对抗之类的乐趣(遭遇战的乐趣和竞技场、战场是不同的,比如被人偷袭反手将其打趴,或者成功连续1vN,或者遇到实力相当、公平竞技的老对手互鞠一躬然后再次分个高下)。并且直接导致很多PvP作用远大于PvE作用的装备、工程物品、附魔珠宝各种强化效果等等失去作用。对于一部分玩家而言,PvE服等于是缺少了一项游戏功能(相当于吃鸡、LOL、农药这样的游戏只能打电脑)。且PvE服缺少联盟与部落之间的频繁对抗(没有同仇敌忾的气氛,没有所谓“外敌”),导致服务器相比于PvP服务器来说更容易变鬼服(平均来说非常明显)。

RPPvP是一类特殊服务器,全名Roleplay PvP服务器,也就是角色扮演服务器。

RP服务器就是让玩家扮演一名真正生活在游戏中的人物,说着这个人物应该说的话、做着这个人物应该做的事、表现出这样的一个人物所应该表现出的一切品质和性格。要求玩家的行为符合这些条件的网络游戏服务器,即被称为RP服务器。

在这样的服务器,玩家的言行需要符合游戏的历史、背景、习俗、文化,要符合自己所使用的游戏角色的身份、地位、职业、性格,不能超游(做出超越游戏氛围之外的“异世界”的言行)。

这种服务器的优点很明显,它有其独有的魅力和氛围,让人更深地沉浸其中,它的缺点也同样明显,说话费劲、无时无刻谨言慎行、游戏内外人格切换、中二感爆炸、对一部分玩家来说甚至有羞耻play的感觉,因此无形中门槛比一般的魔兽服务器高了不少。

这种服务器更接近最初的桌游时代。那时候大家只围一个桌子,拿几张纸片,游戏背景和规则就是简单的几句话,游戏画面全靠自行想象,需要技能就扔几个骰子,推动剧情带动氛围全靠玩家用嘴去演绎。

无论哪种服务器,其游戏背景、任务数量、怪物台词、玩家参数等等所有东西都是一样的。也无所谓孰优孰劣,具体玩哪个看自己喜好。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10273864.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-07
下一篇 2023-05-07

发表评论

登录后才能评论

评论列表(0条)

保存