Jadual Kandungan
回复内容:
Rumah pembangunan bahagian belakang tutorial php ajax长轮询阻塞其他请求?

ajax长轮询阻塞其他请求?

Jun 17, 2016 am 08:32 AM
ajax iframe sleep

为了到底消息及时推送,选择使用ajax长轮询,按照网上各种资料讲的,在页面载入的时候就发起一个ajax请求,然后再服务器端hold住,sleep(1):每隔1秒就查询一下数据表里面的计数值是否大于之前的值(初始值为0),如果大于之前的值说明有新消息就返回计数值提示有多少条信息,然后发起新的请求。否则当运行超过60秒也返回一条信息,还是发起新的请求。但是这样会面临这样的问题,如果你在挂起这条请求的同时,又需要发起其他的请求,那么这些请求就被依次阻塞了,必须要等挂起的请求结束才可以进行被阻塞的请求,这样显然不是我想要的结果。我也看了webqq,它好像是采用了iframe但是我真心的不知道到底改怎么用iframe解决请求的阻塞的问题,请大家不吝赐教。若能避免使用“推拉模式”、“反向ajax”之类的大概念则更好。

回复内容:

阻塞的问题我遇到过,通过排查和查阅资料得到原因如下:
原因:为了安全考虑(避免单个用户并发请求导致的session数据错乱),PHP采用排它锁来互斥的访问session数据(不管你是用session文件还是memcache存session),也就是说开启了session后,单个用户只能串行的访问这个站点,并发的请求只有一个会被立刻响应,其它都会被阻塞。
解决办法:
  1. 不用session
  2. [推荐]及时用 session_write_close() 函数保存session(此函数会释放session数据的排它锁)
  3. [不推荐]自己模拟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可以跨子域发请求,突破这个限制,具体可以参考 blog.zhaojie.me/2007/02 谢谢,我是一名前端,php懂得少,刚好遇到这个问题,感谢大牛~~~~
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
2 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Repo: Cara menghidupkan semula rakan sepasukan
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Cara mendapatkan biji gergasi
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bagaimana untuk menyelesaikan ralat 403 yang dihadapi oleh permintaan jQuery AJAX Bagaimana untuk menyelesaikan ralat 403 yang dihadapi oleh permintaan jQuery AJAX Feb 20, 2024 am 10:07 AM

Tajuk: Kaedah dan contoh kod untuk menyelesaikan ralat 403 dalam permintaan AJAX jQuery Ralat 403 merujuk kepada permintaan bahawa pelayan melarang akses kepada sumber Ralat ini biasanya berlaku kerana permintaan itu tidak mempunyai kebenaran atau ditolak oleh pelayan. Apabila membuat permintaan jQueryAJAX, anda kadangkala menghadapi situasi ini Artikel ini akan memperkenalkan cara menyelesaikan masalah ini dan memberikan contoh kod. Penyelesaian: Semak kebenaran: Mula-mula pastikan alamat URL yang diminta adalah betul dan sahkan bahawa anda mempunyai kebenaran yang mencukupi untuk mengakses sumber tersebut.

Bagaimana untuk menyelesaikan ralat permintaan jQuery AJAX 403 Bagaimana untuk menyelesaikan ralat permintaan jQuery AJAX 403 Feb 19, 2024 pm 05:55 PM

jQuery ialah perpustakaan JavaScript popular yang digunakan untuk memudahkan pembangunan sisi klien. AJAX ialah teknologi yang menghantar permintaan tak segerak dan berinteraksi dengan pelayan tanpa memuatkan semula keseluruhan halaman web. Walau bagaimanapun, apabila menggunakan jQuery untuk membuat permintaan AJAX, anda kadangkala menghadapi 403 ralat. Ralat 403 biasanya ralat akses yang dinafikan pelayan, mungkin disebabkan oleh dasar keselamatan atau isu kebenaran. Dalam artikel ini, kami akan membincangkan cara menyelesaikan permintaan jQueryAJAX yang menghadapi ralat 403

Pantau tingkah laku menatal iframe Pantau tingkah laku menatal iframe Feb 18, 2024 pm 08:40 PM

Cara memantau penatalan iframe memerlukan contoh kod khusus Apabila kami menggunakan teg iframe untuk membenamkan halaman web lain dalam halaman web, kadangkala kami perlu melakukan beberapa operasi khusus pada kandungan dalam iframe. Salah satu keperluan biasa ialah mendengar acara tatal iframe supaya kod yang sepadan boleh dilaksanakan apabila tatal berlaku. Berikut akan memperkenalkan cara menggunakan JavaScript untuk memantau penatalan iframe, dan menyediakan contoh kod khusus untuk rujukan. Dapatkan elemen iframe Pertama, kita perlukan

Bagaimana untuk mendapatkan pembolehubah daripada kaedah PHP menggunakan Ajax? Bagaimana untuk mendapatkan pembolehubah daripada kaedah PHP menggunakan Ajax? Mar 09, 2024 pm 05:36 PM

Menggunakan Ajax untuk mendapatkan pembolehubah daripada kaedah PHP adalah senario biasa dalam pembangunan web Melalui Ajax, halaman boleh diperoleh secara dinamik tanpa menyegarkan data. Dalam artikel ini, kami akan memperkenalkan cara menggunakan Ajax untuk mendapatkan pembolehubah daripada kaedah PHP, dan memberikan contoh kod khusus. Pertama, kita perlu menulis fail PHP untuk mengendalikan permintaan Ajax dan mengembalikan pembolehubah yang diperlukan. Berikut ialah kod contoh untuk fail PHP mudah getData.php:

Bagaimana untuk menyelesaikan masalah jQuery AJAX ralat 403? Bagaimana untuk menyelesaikan masalah jQuery AJAX ralat 403? Feb 23, 2024 pm 04:27 PM

Bagaimana untuk menyelesaikan masalah jQueryAJAX ralat 403? Apabila membangunkan aplikasi web, jQuery sering digunakan untuk menghantar permintaan tak segerak. Walau bagaimanapun, kadangkala anda mungkin menghadapi kod ralat 403 apabila menggunakan jQueryAJAX, menunjukkan bahawa akses dilarang oleh pelayan. Ini biasanya disebabkan oleh tetapan keselamatan bahagian pelayan, tetapi terdapat cara untuk mengatasinya. Artikel ini akan memperkenalkan cara menyelesaikan masalah ralat jQueryAJAX 403 dan memberikan contoh kod khusus. 1. membuat

PHP lwn. Ajax: Penyelesaian untuk mencipta kandungan yang dimuatkan secara dinamik PHP lwn. Ajax: Penyelesaian untuk mencipta kandungan yang dimuatkan secara dinamik Jun 06, 2024 pm 01:12 PM

Ajax (JavaScript Asynchronous dan XML) membenarkan menambah kandungan dinamik tanpa memuatkan semula halaman. Menggunakan PHP dan Ajax, anda boleh memuatkan senarai produk secara dinamik: HTML mencipta halaman dengan elemen kontena dan permintaan Ajax menambah data pada elemen selepas memuatkannya. JavaScript menggunakan Ajax untuk menghantar permintaan kepada pelayan melalui XMLHttpRequest untuk mendapatkan data produk dalam format JSON daripada pelayan. PHP menggunakan MySQL untuk menanyakan data produk daripada pangkalan data dan mengekodnya ke dalam format JSON. JavaScript menghuraikan data JSON dan memaparkannya dalam bekas halaman. Mengklik butang mencetuskan permintaan Ajax untuk memuatkan senarai produk.

Pertukaran data tak segerak menggunakan fungsi Ajax Pertukaran data tak segerak menggunakan fungsi Ajax Jan 26, 2024 am 09:41 AM

Cara menggunakan fungsi Ajax untuk mencapai interaksi data tak segerak Dengan perkembangan teknologi Internet dan Web, interaksi data antara bahagian hadapan dan bahagian belakang telah menjadi sangat penting. Kaedah interaksi data tradisional, seperti penyegaran halaman dan penyerahan borang, tidak lagi dapat memenuhi keperluan pengguna. Ajax (JavaScript Asynchronous dan XML) telah menjadi alat penting untuk interaksi data tak segerak. Ajax membolehkan web menggunakan JavaScript dan objek XMLHttpRequest

Memahami Rangka Kerja Ajax: Terokai Lima Rangka Kerja Biasa Memahami Rangka Kerja Ajax: Terokai Lima Rangka Kerja Biasa Jan 26, 2024 am 09:28 AM

Memahami Rangka Kerja Ajax: Terokai lima rangka kerja biasa, memerlukan contoh kod khusus Pengenalan: Ajax ialah salah satu teknologi penting dalam pembangunan aplikasi Web moden. Ia telah menjadi bahagian penting dalam pembangunan bahagian hadapan kerana ciri-cirinya seperti menyokong interaksi data tak segerak dan menambah baik pengalaman pengguna. Untuk lebih memahami dan menguasai rangka kerja Ajax, artikel ini akan memperkenalkan lima rangka kerja Ajax biasa dan menyediakan contoh kod khusus untuk membantu pembaca memperoleh pemahaman yang mendalam tentang penggunaan dan kelebihan rangka kerja ini. 1. jQueryjQuery adalah yang paling banyak pada masa ini

See all articles