php - swoole可以代替ajax轮询吗
ringa_lee
ringa_lee 2017-04-11 10:23:09
[PHP讨论组]

swoole可以代替ajax轮询吗,用到什么协议呢

ringa_lee
ringa_lee

ringa_lee

全部回复(5)
高洛峰

可以建立 websocket 连接实现长连接

PHP中文网

js:socket.io 监听端口就行啦~

有问题,可以私信我~

黄舟

前端使用原生的websocket请求即可,给你看个例子:

this.websocket = new WebSocket("ws://url_websocket_server")
this.websocket.onopen = function (evt) {
    console.log("已连接websocket服务器");
}
var _this = this
this.websocket.onmessage = function (evt) {
    var data = JSON.parse(evt.data)
    console.log(data)
}
this.websocket.onclose = function (evt) {
    console.log("websocket close");
}
大家讲道理

Swoole 可以通过 swoole_websocket_server 类来进行 WebSocket 协议开发。前端可以使用 js 原生的 WebSocket 进行连接,但是 js 原生的 WebSocket 最低要求 IE10,IE10之前的版本只能通过 Flash 来进行 WebSocket 连接。

高洛峰

原则上是可以的。

可以使用 swoole 开启 websocket 功能。 websocket 出现的其中一个原因就是为了解决 ajax 轮询的空耗资源以及不及时性而出现的。

使用 websocket 后,不论是客户端还是服务器端有新消息都可以实时互相发送。不仅及时,同时可以避免空轮询。

但是 ajax 轮询也不是没有可取之处,比如说不需要即时获取消息的:如每隔一分钟查看一下是否有新公告。公告本身不需要即时获取的,同时公告本身也比较多的情况下。
还有就是本身就是打算要轮询的,比如每个5分钟发一个请求,目的就是保持当前用户在线状态的。

同时还有个比较致命的问题就是 websocket 相对于 ajax 轮询来说比较复杂。ajax 本身是建立在普通 http 请求上的,属于半双工操作,即客户端有些主动权,即我想获取信息时(事件触发)我就发个请求即可,然后在同一个进程里我继续等待服务器返回数据并做相应处理即可。但是 websocket 属于全双工操作,即客户端和服务器是对等的,服务器随时都有可能发消息给客户端,客户端也有可能随时发消息给服务端,程序思维不在是线性的了。需要重新架构你的程序。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号