首页
下载
文档
社区
视频
捐赠
源代码
赞助商
AOT 编译器
AI 助理
商业产品
PHP AOT 原生编译器
Swoole-Compiler 代码加密器
CRMEB 新零售社交电商系统
登录
注册
全部
提问
分享
讨论
建议
公告
开发框架
CodeGalaxy
发表新帖
websocket 服务,很大概率会出现连接失败的现像
### 问题描述 js 端 new WebSocket("ws://ip:port") 后,有时连接正常,有时连接失败,失败时提示:Error during WebSocket handshake: Unexpected response code: 302 ### Swoole版本,PHP版本,以及操作系统版本信息 Swoole: 4.4.19 PHP: 7.2.9 (cli) (built: Sep 9 2018 10:38:07) ( ZTS ) OS: Linux version 3.10.0-693.2.2.el7.x86_64 (builder@kbuilder.dev.centos.org) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-16) (GCC) ) #1 SMP Tue Sep 12 22:26:13 UTC 2017 ### 相关代码 ```javascript //javascript var ws = new WebSocket("ws://ip:port"); ``` ```php //php $server = new Server($listenIP, $listenPort, SWOOLE_PROCESS, SWOOLE_TCP); $server->set([ 'daemonize' => $daemonize, 'pid_file' => $pidFile, 'log_file' => $logFile, 'reactor_num' => $cpuNums, 'worker_num' => $cpuNums, 'max_request' => $maxRequest, 'dispatch_mode' => 5, 'heartbeat_check_interval' => 15, 'heartbeat_idle_time' => 30, 'open_cpu_affinity' => true, ]); //绑定事件 $server->on('start', "Event::onStart"); $server->on('open', "Event::onOpen"); $server->on('workerStart', "Event::onWorkerStart"); $server->on('message', "Event::onMessage"); $server->on('close', "Event::onClose"); $process = new Process(function () use ($server) { //子进程逻辑 }); $server->addProcess($process); ``` ### 你期待的结果是什么?实际看到的错误信息又是什么? 期待服务启动后,websocket 客户端每次都能正常连接
发布于6年前 · 6 次浏览 · 来自
提问
jockyLi
### 问题描述 js 端 new WebSocket("ws://ip:port") 后,有时连接正常,有时连接失败,失败时提示:Error during WebSocket handshake: Unexpected response code: 302 ### Swoole版本,PHP版本,以及操作系统版本信息 Swoole: 4.4.19 PHP: 7.2.9 (cli) (built: Sep 9 2018 10:38:07) ( ZTS ) OS: Linux version 3.10.0-693.2.2.el7.x86_64 (builder@kbuilder.dev.centos.org) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-16) (GCC) ) #1 SMP Tue Sep 12 22:26:13 UTC 2017 ### 相关代码 ```javascript //javascript var ws = new WebSocket("ws://ip:port"); ``` ```php //php $server = new Server($listenIP, $listenPort, SWOOLE_PROCESS, SWOOLE_TCP); $server->set([ 'daemonize' => $daemonize, 'pid_file' => $pidFile, 'log_file' => $logFile, 'reactor_num' => $cpuNums, 'worker_num' => $cpuNums, 'max_request' => $maxRequest, 'dispatch_mode' => 5, 'heartbeat_check_interval' => 15, 'heartbeat_idle_time' => 30, 'open_cpu_affinity' => true, ]); //绑定事件 $server->on('start', "Event::onStart"); $server->on('open', "Event::onOpen"); $server->on('workerStart', "Event::onWorkerStart"); $server->on('message', "Event::onMessage"); $server->on('close', "Event::onClose"); $process = new Process(function () use ($server) { //子进程逻辑 }); $server->addProcess($process); ``` ### 你期待的结果是什么?实际看到的错误信息又是什么? 期待服务启动后,websocket 客户端每次都能正常连接
赞
0
收藏
提问
分享
讨论
建议
公告
开发框架
CodeGalaxy
登录
后参与评论
评论
2020-07-24
jockyLi
 
赞
0
回复
2020-07-24
jockyLi
回复
jockyLi
这个 ip 换成域名后没有问题了,但是不知道为什么会出现这种情况
赞
0
回复
2020-07-24
郭新华
别new server啊 new websocket server
赞
0
回复
2020-07-24
jockyLi
回复
郭新华
哦不好意思,用 use 引用了,实际是 websocket server 的
赞
0
回复
2020-07-24
鲁飞
请贴完整代码,未复现问题。 可以使用最简代码复现后再次提问。 ```php //创建websocket服务器对象,监听0.0.0.0:9502端口 $ws = new Swoole\WebSocket\Server("0.0.0.0", 9502); //监听WebSocket连接打开事件 $ws->on('open', function ($ws, $request) { var_dump($request->fd, $request->get, $request->server); $ws->push($request->fd, "hello, welcome\n"); }); //监听WebSocket消息事件 $ws->on('message', function ($ws, $frame) { echo "Message: {$frame->data}\n"; $ws->push($frame->fd, "server: {$frame->data}"); }); //监听WebSocket连接关闭事件 $ws->on('close', function ($ws, $fd) { echo "client-{$fd} is closed\n"; }); $ws->start(); ```
赞
0
回复
2020-07-24
jockyLi
回复
鲁飞
间隙性的,有时出现这个错误,有时又能正常连接,后来我把 ip 换成域名了,再连接的时候就没发生过这个问题了。 PS: 服务器是香港的阿里云,从大陆发起的请求
赞
0
回复
2020-07-24
happypy
回复
jockyLi
那是不是因为该ip地址可能对应着多个web站点,只有通过域名才可以。
赞
0
回复
2020-07-25
jockyLi
回复
happypy
对的,用 apache 虚拟主机配置了多个网站
赞
0
回复