目次
回复内容:
ホームページ バックエンド開発 PHPチュートリアル 文字播报型的自动战斗系统该如何保障不出现漏洞?

文字播报型的自动战斗系统该如何保障不出现漏洞?

Jun 06, 2016 pm 04:43 PM
php post socket

目前是想做一款纯文字类网页游戏,战斗模式采用文字播报模式
看到过一个别人写的是,本地进行战斗计算,最后把战斗结果post到服务器上,这种很容易造成漏洞,直接在本地修改结果不停的post
如果同步战斗状态的,感觉会太复杂,有没有方便的方法不容易出漏洞
我将php和c#用socket连接在一起,可以进行数据交换计算,可以利用这个做吗?

回复内容:

战斗过程中如果玩家不能介入的话,直接服务端算好整场战斗过程,一次性下发到客户端慢慢播文字就是了,你指的复杂是什么。

用socket的话,需要实现一套基于socket的游戏协议,好处是省流量、通信灵活,服务器主动推送信息容易。如果想简单点,可考虑直接用http短连接通信,但对于一些服务器主动下行的功能不好实现。 矮油,我觉得我应该很有资格回答这个问题,因为我做的游戏就是这样的。
看到楼主是用php,那么觉得我更有资格了。

首先分为两种情况。
1. 所有战斗都在服务器一次性完成,客户端只是简单的播报结果
这是最简单的,也是我现在用的方案,也是绝大多数古典页游用的方法。
客户端提交一个战斗请求,然后在服务器完全全部计算,将结果用json或者其他什么方法传给客户端,然后浏览器再用js解析出来。
注意:这种方法也不能完全的杜绝客户端作弊,最典型的例子,对于一些有消耗的战斗(无论是有冷却时间,还是入场需要消费资源),玩家开两个窗口然后同时点击战斗按钮,可能会出现双份奖励。我的游戏就曾经出现过这种bug。
此外,还存在我在后台改了数据没有刷新缓存导致前台用户玩的时候出现崩溃的问题。
总之这种方法难度不高,对服务器压力也小(因为是集中计算)。
缺点是无法响应玩家输入,也就是玩家并不能在战斗中进行控制,这就要看你的游戏是否要求玩家在战斗中进行操作了。

2.战斗会一边进行一边回传到客户端,响应客户端输入之后再传到服务器。
这种会比较难,其实这里麻烦的问题反而不是作弊,而是服务器负载……只要做好负载反而就没有什么问题。
方法有很多种,你说的socket是一种,但我不懂……(-_-|||)。
此外还有node.js系列的socket.io,更轻量,毕竟涉及C#就要涉及.net那种大而厚的东西,node.js相比之下更轻。
当然如果不选PHP的话,也有更多其他方案,比如纯asp.net或者纯java,甚至可以用现代的手段比如unity,当然这就扯远了……
所以如果要我来做的话,估计还是会选传统的js轮询ajax的办法,不断去服务器查。会更吃一点服务器资源(毕竟每次玩家操作都要走一次完整的http request),所以对于我们这种VPS放国外的屌丝可能会遭遇延迟问题。因此,我大概会把游戏做成延迟不影响游戏体验的模式。
举例就是做一个万智牌游戏,我点击出牌的时候,动画直接播放出牌效果(但此时还处于http request中),然后画面出现“电脑正在思考中”,然后播放电脑的出牌结果。
当然还有个办法就是你说的,把一些简单的东西放到客户端,但实际上这些内容必须还是要传到服务器在计算一次,最终回来的时候覆盖客户端算的结果,并且要保证从头到尾不使用客户端的数据。客户端计算的数据“仅仅是处于让玩家感受速度快”。
这点其实很常见,比如大型网站点赞,点赞的瞬间就+1了,其实只是客户端计算而已。刷新之后就会变成真实数据。
如果负载实在扛不住,可以考虑把游戏的一部分做成不消耗服务器的模式(例如你的游戏设定,在上面玩2小时可以获得100点游戏内战斗力,那么你就设置一个2小时的远征任务,这个任务挂好了之后就获得100点战斗力,又或者刷1天怪物平均可以获得3件装备,那么你可以设置一个副本,冷却时间24小时,必掉3件装备)。
总体上玩家的收益是相同的。
我倾向于把游戏做成不那么肝(也就是不需要反复算时间,一直在屏幕前点点点)。因此服务器负载倒不是那么大,512M1核的低配VPS,长期负载也就0.0x,所以还跑了几个其他业余利用资源……

有想到再补充

利益相关:RPG类型纯文字类网页游戏 莉诺达斯 - Linodas.com 制作人。
(PS:前几天打通了奥里与迷失森林,所以在首页放了一个全屏跳转推荐这款游戏,不要以为进错网站了。。 不要本地计算,用服务端计算后下发客户端就好。
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Dec 24, 2024 pm 04:42 PM

PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

今まで知らなかったことを後悔している 7 つの PHP 関数 今まで知らなかったことを後悔している 7 つの PHP 関数 Nov 13, 2024 am 09:42 AM

あなたが経験豊富な PHP 開発者であれば、すでにそこにいて、すでにそれを行っていると感じているかもしれません。あなたは、運用を達成するために、かなりの数のアプリケーションを開発し、数百万行のコードをデバッグし、大量のスクリプトを微調整してきました。

PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 Dec 20, 2024 am 11:31 AM

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、

JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 Apr 05, 2025 am 12:04 AM

JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

PHPでHTML/XMLを解析および処理するにはどうすればよいですか? PHPでHTML/XMLを解析および処理するにはどうすればよいですか? Feb 07, 2025 am 11:57 AM

このチュートリアルでは、PHPを使用してXMLドキュメントを効率的に処理する方法を示しています。 XML(拡張可能なマークアップ言語)は、人間の読みやすさとマシン解析の両方に合わせて設計された多用途のテキストベースのマークアップ言語です。一般的にデータストレージに使用されます

母音を文字列にカウントするPHPプログラム 母音を文字列にカウントするPHPプログラム Feb 07, 2025 pm 12:12 PM

文字列は、文字、数字、シンボルを含む一連の文字です。このチュートリアルでは、さまざまな方法を使用してPHPの特定の文字列内の母音の数を計算する方法を学びます。英語の母音は、a、e、i、o、u、そしてそれらは大文字または小文字である可能性があります。 母音とは何ですか? 母音は、特定の発音を表すアルファベットのある文字です。大文字と小文字など、英語には5つの母音があります。 a、e、i、o、u 例1 入力:string = "tutorialspoint" 出力:6 説明する 文字列「TutorialSpoint」の母音は、u、o、i、a、o、iです。合計で6元があります

PHPでの後期静的結合を説明します(静的::)。 PHPでの後期静的結合を説明します(静的::)。 Apr 03, 2025 am 12:04 AM

静的結合(静的::) PHPで後期静的結合(LSB)を実装し、クラスを定義するのではなく、静的コンテキストで呼び出しクラスを参照できるようにします。 1)解析プロセスは実行時に実行されます。2)継承関係のコールクラスを検索します。3)パフォーマンスオーバーヘッドをもたらす可能性があります。

PHPマジックメソッド(__construct、__destruct、__call、__get、__setなど)とは何ですか? PHPマジックメソッド(__construct、__destruct、__call、__get、__setなど)とは何ですか? Apr 03, 2025 am 12:03 AM

PHPの魔法の方法は何ですか? PHPの魔法の方法には次のものが含まれます。1。\ _ \ _コンストラクト、オブジェクトの初期化に使用されます。 2。\ _ \ _リソースのクリーンアップに使用される破壊。 3。\ _ \ _呼び出し、存在しないメソッド呼び出しを処理します。 4。\ _ \ _ get、dynamic属性アクセスを実装します。 5。\ _ \ _セット、動的属性設定を実装します。これらの方法は、特定の状況で自動的に呼び出され、コードの柔軟性と効率を向上させます。

See all articles