为了到底消息及时推送,选择使用ajax长轮询,按照网上各种资料讲的,在页面载入的时候就发起一个ajax请求,然后再服务器端hold住,sleep(1):每隔1秒就查询一下数据表里面的计数值是否大于之前的值(初始值为0),如果大于之前的值说明有新消息就返回计数值提示有多少条信息,然后发起新的请求。否则当运行超过60秒也返回一条信息,还是发起新的请求。但是这样会面临这样的问题,如果你在挂起这条请求的同时,又需要发起其他的请求,那么这些请求就被依次阻塞了,必须要等挂起的请求结束才可以进行被阻塞的请求,这样显然不是我想要的结果。我也看了webqq,它好像是采用了iframe但是我真心的不知道到底改怎么用iframe解决请求的阻塞的问题,请大家不吝赐教。若能避免使用“推拉模式”、“反向ajax”之类的大概念则更好。
回复内容:
阻塞的问题我遇到过,通过排查和查阅资料得到原因如下:原因:为了安全考虑(避免单个用户并发请求导致的session数据错乱),PHP采用排它锁来互斥的访问session数据(不管你是用session文件还是memcache存session),也就是说开启了session后,单个用户只能串行的访问这个站点,并发的请求只有一个会被立刻响应,其它都会被阻塞。
解决办法:
- 不用session
- [推荐]及时用 session_write_close() 函数保存session(此函数会释放session数据的排它锁)
-
[不推荐]自己模拟session。不调用session_start(此函数会锁住session数据)通过cookie获得session_id,然后获取session数据。通过session_decode/encode编解码session数据保存等
不要用ajax,因为比较耗费服务器资源,实时性也得不到很好的保证。
我用的是WebSocket(HTML5/Flash)+PHP Socket 服务器(workerman 一个高性能的PHP Socket 服务器框架)
这个方案实时性高,并且消耗资源非常低,多浏览器支持。
DEMO:
发送消息的后台页面:Web消息推送器
实时接收消息的页面:Web消息接受页面
代码地址:walkor/web-msg-sender · GitHub
还有个PHP+WebSocket聊天室也是类似的原理:workerman-chat
安装使用就两步(workerman不依赖apache、nginx、php-fpm等容器就可以直接运行。不支持Win):
1、下载代码
2、运行./bin/workermand start
一切ok
发消息后台:http://ip:3333
接受消息页面:http://ip:3333/web-msg-sender.html 会有人愿意在各种"不行","不要",近乎被侮辱的情况下帮你解决这么具体的技术问题吗? 这个是由于session被占用导致的,让长轮循不再操作session。用session_write_close()的函数可以解决你的问题。 为何不用comet 如何解决,我将php逻辑代码全部去除了,只在接口的for循环十次里sleep(1),但还是存在ajax等待循环ajax执行完成在执行
答案:session_write_close 好像是ajax请求同一个域名,一次限制只能发送2个请求,用iframe可以跨子域发请求,突破这个限制,具体可以参考 http://blog.zhaojie.me/2007/02/break-the-browsers-restrictions-6.html 谢谢,我是一名前端,php懂得少,刚好遇到这个问题,感谢大牛~~~~

404页面基础配置404错误是www网站访问容易出现的错误。最常见的出错提示:404notfound。404错误页的设置对网站seo有很大的影响,而设置不当,比如直接转跳主页等,会被搜索引擎降权拔毛。404页面的目的应该是告诉用户:你所请求的页面是不存在的,同时引导用户浏览网站其他页面而不是关掉窗口离去。搜索引擎通过http状态码来识别网页的状态。当搜索引擎获得了一个错误链接时,网站应该返回404状态码,告诉搜索引擎放弃对该链接的索引。而如果返回200或302状态码,搜索引擎就会为该链接建立索引

Scrapy是一个开源的Python爬虫框架,它可以快速高效地从网站上获取数据。然而,很多网站采用了Ajax异步加载技术,使得Scrapy无法直接获取数据。本文将介绍基于Ajax异步加载的Scrapy实现方法。一、Ajax异步加载原理Ajax异步加载:在传统的页面加载方式中,浏览器发送请求到服务器后,必须等待服务器返回响应并将页面全部加载完毕才能进行下一步操

ajax传递中文乱码的解决办法:1、设置统一的编码方式;2、服务器端编码;3、客户端解码;4、设置HTTP响应头;5、使用JSON格式。详细介绍:1、设置统一的编码方式,确保服务器端和客户端使用相同的编码方式,通常情况下,UTF-8是一种常用的编码方式,因为它可以支持多种语言和字符集;2、服务器端编码,在服务器端,确保将中文数据以正确的编码方式进行编码,再传递给客户端等等。

作为一种基于MVC模式的PHP框架,CakePHP已成为许多Web开发人员的首选。它的结构简单,易于扩展,而其中的AJAX技术更是让开发变得更加高效。在本文中,将介绍如何使用CakePHP中的AJAX。什么是AJAX?在介绍如何在CakePHP中使用AJAX之前,我们先来了解一下什么是AJAX。AJAX是“异步JavaScript和XML”的缩写,是指一种在

ajax重构指的是在不改变软件现有功能的基础上,通过调整程序代码改善软件的质量、性能,使其程序的设计模式和架构更合理,提高软件的扩展性和维护性;Ajax的实现主要依赖于XMLHttpRequest对象,由于该对象的实例在处理事件完成后就会被销毁,所以在需要调用它的时候就要重新构建。

jquery ajax报错403是因为前端和服务器的域名不同而触发了防盗链机制,其解决办法:1、打开相应的代码文件;2、通过“public CorsFilter corsFilter() {...}”方法设置允许的域即可。

当提交表单时,捕获提交过程并尝试运行以下代码片段来上传文件-//File1varmyFile=document.getElementById('fileBox').files[0];varreader=newFileReader();reader.readAsText(file,'UTF-8');reader.onload=myFunc;functionmyFunc(event){ varres

CSRF代表跨站请求伪造。CSRF是未经授权的用户冒充授权执行的恶意活动。Laravel通过为每个活动用户会话生成csrf令牌来保护此类恶意活动。令牌存储在用户的会话中。如果会话发生变化,它总是会重新生成,因此每个会话都会验证令牌,以确保授权用户正在执行任何任务。以下是访问csrf_token的示例。生成csrf令牌您可以通过两种方式获取令牌。通过使用$request→session()→token()直接使用csrf_token()方法示例<?phpnamespaceApp\Http\C


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

Dreamweaver CS6
視覺化網頁開發工具

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

記事本++7.3.1
好用且免費的程式碼編輯器

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中