swoole创建WebSocket客户端过程
swoole 开发文档 https://wiki.swoole.com/#/
1.安装swoole
我用的时宝塔面版,所以可以从宝塔直接安装
安装前必须保证系统已经安装了下列软件
php-7.2
或更高版本gcc-4.8
或更高版本make
autoconf
宝塔以上软件应该都默认装好了,自已装上php7.2或以上的版本,在安装swoole的扩展
从软件管管-》已安装-》php7.2-》设置-》安装扩展
2. 进入linux 终端 查看是否已经安装成功
输入命令 php -m
看到有 swoole ,就说明安装成功了
3 .创建swoole 的 WebSocket 服务器
注意需要开放9502端口,阿里云服务器的,需要在阿里云平台以及宝塔安全,都开放9502端口
创建swoole.php 文件
<?php //创建WebSocket Server对象,监听0.0.0.0:9502端口 $ws = new Swoole\WebSocket\Server('0.0.0.0', 9502); //监听WebSocket连接打开事件 $ws->on('Open', function ($ws, $request) { $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();
4. 进入终端 启动 WebSocket 服务器
cd 到前面创建的swoole目录下,php swoole.php 启动,没有报错就说明启动成功了
ps: 注意通过url直接访问swoole.php文件是报错的,这里必需用linux命令去启动哦。
5,前端连接WebSocket 服务器
创建index.html文件
ps:注意 wsServer = 'ws://你的服务器ip:9502'; 修改成你的服务器ip,服务器9502已放开
<html> <head> <meta charset="UTF-8"> <meta name="renderer" content="webkit|ie-comp|ie-stand"> <meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1"> <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no"> </head> <body> <script> var wsServer = 'ws://你的服务器ip:9502'; var websocket = new WebSocket(wsServer); websocket.onopen = function (evt) { console.log("Connected to WebSocket server."); websocket.send('hello'); }; websocket.onclose = function (evt) { console.log("Disconnected"); }; websocket.onmessage = function (evt) { console.log('Retrieved data from server: ' + evt.data); }; websocket.onerror = function (evt, e) { console.log('Error occured: ' + evt.data); }; </script> </body> </html>
说明已链接成功
尝试发送消息看一下
websocket.send('链接看一下');
看到了返回的消息,说链接成功
注意事项,启动swoole.php经常服错,可能是端口未正常关闭,需要杀死进程即可
1 查看我的 swoole 监听端口号 9502
netstat -anp | grep 9502
2 杀死进程,在重新启动swoole即可
kill -9 15923