목차
回复讨论(解决方案)
백엔드 개발 PHP 튜토리얼 :多用户同时访问时的问题?

:多用户同时访问时的问题?

Jun 23, 2016 pm 01:48 PM
여러 사용자 입장

请各位大牛不吝指教,先谢过去了!
情况描述如下:

系统结构:1. 界面模块(php) -->2. 中间接口(php) --> 3. 数据库(mysql)
1. 界面模块:显示操作界面及操作结果;
2. 中间接口:负责界面模块和数据库之间的数据交换,及其他功能(跟求助问题无关,不加以描述);

大致流程:从界面模块发送http请求,该请求发送给接口模块,接口模块访问数据库获得数据,返回给界面模块;

问题来了:
界面模块有大量访问用户,这些用户可能同时发送同样的请求给接口,比如:同时编辑某一数据。

问:如何才能避免这种问题?

不知道有没描述清楚,请各大牛赐教,谢谢!


回复讨论(解决方案)

加锁

若业务上允许“同时编辑某一数据”,则以最后提交的为准
否则在收到请求时返回 xxx正在编辑

谢谢斑竹的指教!能详细点吗?合作方要求只能在界面模块进行限制同时编辑某一数据。

在用户A编辑某条新闻读取成功时,将这条数据的状态字段设为1,记录读取的时间戳
此时再有人想编辑,状态1就拒绝
用户A的页面ajax轮询,每隔几十秒告诉服务器还在编辑并刷新时间
当A编辑提交,或用户B想编辑状态为1,但是最后一次ajax提交的时间和当前差太多,就设置状态为0

在用户A编辑某条新闻读取成功时,将这条数据的状态字段设为1,记录读取的时间戳
此时再有人想编辑,状态1就拒绝
用户A的页面ajax轮询,每隔几十秒告诉服务器还在编辑并刷新时间
当A编辑提交,或用户B想编辑状态为1,但是最后一次ajax提交的时间和当前差太多,就设置状态为0



谢谢您的回复,我有些疑惑在界面模块可以这样做吗?我曾讨教过一位做了多年php的朋友,他告诉我这没法整。
之前我也想过设置标识,因为无法操作数据库,所以放弃了。

编辑的时候不需要权限么?A发的B也可以编辑么?

编辑的时候不需要权限么?A发的B也可以编辑么?



谢谢您的到来!
编辑的时候需要权限,但可以在线多个有权限的用户进行编辑某一条数据。

不允许同时编辑同一条记录,是业务层面的需求
业务需求的实现,应在 中间接口 中完成。如有特殊需求,也可在 界面模块 完成
你的这个需求还是应在 中间接口 中完成的

不允许同时编辑同一条记录,是业务层面的需求
业务需求的实现,应在 中间接口 中完成。如有特殊需求,也可在 界面模块 完成
你的这个需求还是应在 中间接口 中完成的



感谢版主的再次指教!谢谢“xuzuning”版主!
我描述的还不够细致,重新描述下业务逻辑:
界面层的功能包括:数据显示,数据编辑请求,操作用户的管理等,且界面层有操作用户的数据库。
中间接口层:处理界面层的请求,无视操作用户,不管哪个操作用户的操作请求,中间接口层都视为合法。

我感觉版主您的意思是在中间接口层处理,然后不管谁发过来的请求,请求过来,标识锁定,返回结果后再标识解锁?
我之前也是这样认为的,因为第一次接触php, 对方是老手,所以不敢确定。

对方非得要我在界面层来处理该业务,说用ajax就可以, 但我觉得我无法去设标识,所以困惑,才有此问。

再次感谢版主的指教!

放在 中间层 比较合适
因为一般的说,中间层就是通常说的 API 
加一个过滤条件比较简单

当然在界面层也可以实现,不过界面层不宜(不能)直接访问数据层。
所以要单独设置缓存机制,未处理完的就不再向中间层发请求
用一个共享内存或数据库或文件的队列就可以了

放在 中间层 比较合适
因为一般的说,中间层就是通常说的 API 
加一个过滤条件比较简单

当然在界面层也可以实现,不过界面层不宜(不能)直接访问数据层。
所以要单独设置缓存机制,未处理完的就不再向中间层发请求
用一个共享内存或数据库或文件的队列就可以了



太感谢了,清晰很多了,谢谢!!!
结贴,呵呵。
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

뜨거운 기사 태그

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

Java에서 JSONNode의 JSON 필드, 배열 및 중첩 개체에 액세스하는 방법은 무엇입니까? Java에서 JSONNode의 JSON 필드, 배열 및 중첩 개체에 액세스하는 방법은 무엇입니까? Aug 30, 2023 pm 11:05 PM

Java에서 JSONNode의 JSON 필드, 배열 및 중첩 개체에 액세스하는 방법은 무엇입니까?

iOS 17: 사진에 액세스할 수 있는 앱을 제어하는 ​​방법 iOS 17: 사진에 액세스할 수 있는 앱을 제어하는 ​​방법 Sep 13, 2023 pm 09:09 PM

iOS 17: 사진에 액세스할 수 있는 앱을 제어하는 ​​방법

Python을 사용하여 다양한 오디오 및 비디오 파일의 메타데이터에 액세스 Python을 사용하여 다양한 오디오 및 비디오 파일의 메타데이터에 액세스 Sep 05, 2023 am 11:41 AM

Python을 사용하여 다양한 오디오 및 비디오 파일의 메타데이터에 액세스

Tomcat이 war 패키지를 배포한 후 접근성 문제를 해결하는 방법 Tomcat이 war 패키지를 배포한 후 접근성 문제를 해결하는 방법 Jan 13, 2024 pm 12:07 PM

Tomcat이 war 패키지를 배포한 후 접근성 문제를 해결하는 방법

Windows 10 Home Edition에서 공유 폴더에 액세스할 수 없는 경우 수행할 작업 Windows 10 Home Edition에서 공유 폴더에 액세스할 수 없는 경우 수행할 작업 Jan 11, 2024 pm 07:36 PM

Windows 10 Home Edition에서 공유 폴더에 액세스할 수 없는 경우 수행할 작업

Windows 7에서 파일 수정 시 액세스 거부 문제를 해결하는 방법 Windows 7에서 파일 수정 시 액세스 거부 문제를 해결하는 방법 Jul 04, 2023 pm 07:01 PM

Windows 7에서 파일 수정 시 액세스 거부 문제를 해결하는 방법

PHP 개발 시 외부 리소스 액세스 및 호출을 해결하는 방법 PHP 개발 시 외부 리소스 액세스 및 호출을 해결하는 방법 Oct 08, 2023 am 11:01 AM

PHP 개발 시 외부 리소스 액세스 및 호출을 해결하는 방법

HTML5에서만 카메라 장치 액세스 허용 HTML5에서만 카메라 장치 액세스 허용 Sep 22, 2023 pm 11:09 PM

HTML5에서만 카메라 장치 액세스 허용

See all articles