Swoole入门 - WebSocket 服务

Swoole入门 - WebSocket 服务,第1张

WebSocket协议是基于TCP的一租清种新的网络协议。他实现了浏览器与服务器全双工通信—允许服务器主动发送信息给客户端

建搏禅立在TCP协议之上

性能开销小性能高效

客户端可以与任意服务器通信

协议标识符号 ws wss

持久化网络通信协议

WebSocket服务器是建立在Http服务器之上的长连接服务器,客户端首先会发送一个Http的请求与服务器进行握手。握手成功后会触发onOpen事件,表示连接已就绪,onOpen函数中可以得到$request对象,包含了Http握手的相关信息,如GET参数、Cookie、Http头信息等。

建立连接后客户端与服务基型尘器端就可以双向通信了。

客户端向服务器端发送信息时,服务器端触发onMessage事件回调

服务器端可以调用$server->push()向某个客户端(使用$fd标识符)发送消息

服务器端可以设置onHandShake事件回调来手工处理WebSocket握手

swoole_http_server是swoole_server的子类,内置了Http的支持

swoole_websocket_server是swoole_http_server的子类, 内置了WebSocket的支持。

WebSocket\Server 继承自 Http\Server

设置了onRequest回调,WebSocket\Server也可以同时作为http服务器

未设置onRequest回调,WebSocket\Server收到http请求后会返回http 400错误页面

如果想通过接收http触发所有websocket的推送,需要注意作用域的问题,面向过程请使用global对WebSocket\Server进行引用,面向对象可以把WebSocket\Server设置成一个成员属性

创建ws_client.html

1、通过httpserver来开启:分别执行swoole-http服务、websocket服务文件启动服务,浏览器访问 http://127.0.0.1:8811/ws_client.html ,注意这里请求的是8811端口,即httpserver中配置的端口,在控制台中查看效果。同时可在浏览器开启多个会话,查看多个连接效果。

2、通过websocket-server来开启加载:

在websocket-server中添加配置

此时关闭http-server、websocket-server,并重启websocket-server,不再重启http-server,使用8812端口在浏览器访问 http://127.0.0.1:8812/ws_client.html ,同样成功。

swoole扩展是PHP扩展。php swoole扩展,PHP语言的高性能网络通信框架,提供了PHP语言的异步多线程服务器,异步TCP/UDP网络客户端,异步MySQL,数据库连接池,AsyncTask,消息队列,毫秒定时器,异步文纤孙纯件读写,异步DNS查询。

1、下载swoole源码包 

[root@nginx ~]# wget

   

2、解压进入swoole文件夹  

[root@nginx ~]# tar -zxvf swoole-1.7.17-stable

[root@nginx ~]# cd swoole-src-swoole-1.7.17-stable/

   

3、编译安装swoole  凯拦 

[root@nginx swoole-src-swoole-1.7.17-stable]# phpize

[root@nginx swoole-src-swoole-1.7.17-stable]# ./configure

[root@nginx swoole-src-swoole-1.7.17-stable]# make &&make install

   

4、php.ini配置文件加载swoole.so模块  

[root@nginx swoole-src-swoole-1.7.17-stable]# vi /usr/local/php/lib/php.ini

注意 php命令行运行毁咐和浏览器运行的配置文件不一样。

php 命令行的配置:

[root@nginx swoole-src-swoole-1.7.17-stable]# php --ini

Configuration File (php.ini) Path: /usr/local/lib

Loaded Configuration File: /usr/local/lib/php.ini//配置文件

Scan for additional .ini files in: (none)

Additional .ini files parsed: (none)

    

5、查看swoole模块是否已经安装成功

[root@nginx swoole-src-swoole-1.7.17-stable]# php -m

   

6、编写服务端httpServer.php文件并运行

$serv = new swoole_server("127.0.0.1", 9501)

$serv->on('connect', function ($serv, $fd){

echo "Client:Connect.\n"

})

$serv->on('receive', function ($serv, $fd, $from_id, $data) {

$serv->send($fd, 'Swoole: '.$data)

})

$serv->on('close', function ($serv, $fd) {

echo "Client: Close.\n"

})

$serv->start()

   

运行httpServer.php

[root@nginx swoole-src-swoole-1.7.17-stable]# php httpServer.php

   

7、用telnet测试

[root@nginx ~]# telnet 127.0.0.1 9501

Trying 127.0.0.1...

Connected to 127.0.0.1.

Escape character is '^]'.

hello 客户端

Swoole: hello 服务端

来源:PHP swoole扩展安装和使用-

   20170819 13:57


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12424874.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存