Fork me on GitHub

利用 Swoole 实现 PHP+websocket 聊天室

关于 Swoole

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

支持的服务:

  • HttpServer
  • WebSocket Server
  • TCP Server
  • TCP Client
  • Async-IO(异步)
  • Task(定时任务)

官方文档:https://www.swoole.com/

安装swoole

1
2
3
pecl install swoole
echo "extension=swoole.so" > /usr/local/php/etc/php.d/ext-swoole.ini
service php-fpm restart

开发一个简单的聊天室

服务端

利用Swoole实现PHP-websocket-聊天室

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
//创建websocket服务器对象,监听0.0.0.0:9502端口
$server = new swoole_websocket_server("0.0.0.0", 9502);

//监听WebSocket连接打开事件
$server->on('open', function (swoole_websocket_server $server, $request) {
echo "server: handshake success with fd{$request->fd}\n";

$GLOBALS['fd'][] = $request->fd;
});

//监听WebSocket消息事件
$server->on('message', function (swoole_websocket_server $server, $frame) {
$msg = "receive from {$frame->fd}:{$frame->data},opcode:{$frame->opcode},fin:{$frame->finish},fd:{$frame->fd}\n";
echo $msg;

foreach($GLOBALS['fd'] as $fd){
$server->push($fd, $msg);
}
});

客户端

利用Swoole实现PHP-websocket-聊天室

代码参考:
https://github.com/yunshu2009/swoole-src/blob/master/examples/websocket/client.html

学习资料

------本文结束感谢阅读------
欣赏此文?求鼓励,求支持!