用swoole扩展编写WebSocket聊天室
来源:互联网 发布:淘宝封号能自动解封吗 编辑:程序博客网 时间:2024/05/24 02:16
最近正在接触swoole扩展 先写个简单的swoole聊天室demo吧
<!DOCTYPE html><html><head> <title>swoole chatroom</title> <meta charset="UTF-8"> <script type="text/javascript"> var exampleSocket = new WebSocket("ws://0.0.0.0:9501"); exampleSocket.onopen = function (event) { exampleSocket.send("连接!"); }; exampleSocket.onmessage = function (event) { var chat_room = document.querySelector("#chatroom"); var data = event.data; var chat_list = document.createElement("li"); var chat_content = document.createTextNode(data); chat_list.appendChild(chat_content); chat_room.appendChild(chat_list); } </script></head><body> <input type="text" id="content"> <button onclick="exampleSocket.send( document.getElementById('content').value )">发送</button> <div id="chatroom"> <ul id="chatlist"> </ul> </div></body></html>
用的是连接方式是WebSocket
使用将onopen绑定到WebSocket事件原因是因为建立WebSocket的方式是异步的,所以要在其成功建立对象时确定连接是否成功
onmessage是接受消息时触发的方法
<?php$server = new swoole_websocket_server("0.0.0.0", 9501);$max = 0;$server->on('open', function (swoole_websocket_server $server, $req) { //每一次客户端连接 最大连接数将增加 global $max; $max++;});$server->on('message', function (swoole_websocket_server $server, $frame) { $fd = $frame->fd; $data = $frame->data; $message = "连接号{$fd}:内容:{$data}"; global $max; //向所有人广播 for ($i = 1; $i <= $max; $i++) { echo PHP_EOL . time('Y-m-d h:m:s') . ': ' . $fd . " : " . $data; $server->push($i, $message); }});$server->on('close', function (swoole_websocket_server $server, $fd) { //关闭连接 连接减少 global $max; $max--; echo "client {$fd} closed\n";});$server->start();
服务端的原理:
全局变量$max存储连接数,每当发生一个WebSocket连接时,$max加一
取得连接后,用push向所有连接进行广播
关闭连接时,连接数减少
然而这仍然存在一些问题 比如当浏览器刷新的时候 没有close掉旧的连接 而是又创建了一个新的连接
这些在该demo里都没有得到处理
2 0
- 用swoole扩展编写WebSocket聊天室
- 利用Swoole实现PHP+websocket 聊天室
- 利用Swoole实现PHP+websocket 聊天室
- websocket聊天室,简单版本,基于swoole
- 利用Swoole实现PHP+websocket 聊天室
- 基于websocket和swoole的简易聊天室
- 利用Swoole实现PHP+websocket 聊天室
- Swoole-WebSocket-Chat 聊天室前后端demo
- 利用Swoole实现PHP+websocket 聊天室
- 利用php扩展swoole创建WebSocket服务器
- Android用Websocket实现聊天室
- swoole搭建简易聊天室
- WebSocket 聊天室
- WebSocket聊天室
- websocket聊天室
- websocket聊天室
- websocket聊天室
- swoole实现websocket推送
- 环境变量
- HDU 1392 Surround the Trees
- Shell脚本中计算字符串长度的5种方法
- 指针p,q,r依次指向某循环链表中三个相邻的结点,交换结点*q,*r在表中次序的程序段是
- 跳转微信
- 用swoole扩展编写WebSocket聊天室
- Binary Tree Level Order Traversal
- iOS 富文本
- DAY7:leetcode #16 3Sum Closest
- HDU 3293:sort
- Day10 远程服务与本地服务
- iOS 为自定义返回按钮的页面添加右滑返回
- UBUNTU 创建samba服务
- 在myeclipse中出现Parse error in application web.xml file 问题