经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » PHP » 查看文章
swoole中websoket创建在线聊天室(php)
来源:cnblogs  作者:Jurij  时间:2021/1/11 9:46:55  对本文有异议

swoole中websoket创建在线聊天室(php)

swoole现仅支持Linix,macos

创建websocket服务器

首先现在服务器创建一个websocket服务器

  1. <?php
  2. //创建websocket服务器
  3. $server = new Swoole\WebSocket\Server("0.0.0.0", 6060);
  4. // 当WebSocket客户端与服务器建立连接并完成握手后会回调此函数
  5. $server->on('open', function (Swoole\WebSocket\Server $server, Swoole\Http\Request $request) {
  6. });
  7. // 服务器主动向客户端发送数据
  8. $server->on('message', function (Swoole\WebSocket\Server $server, swoole_websocket_frame $frame) {
  9. $data = $frame->data;
  10. $ret['data'] = $data;
  11. //广播群发
  12. foreach ($server->connections as $client) {
  13. //判断客户端是否自己
  14. if ($frame->fd == $client) {
  15. $ret['style'] = 'bubble me';
  16. } else {
  17. $ret['style'] = 'bubble you';
  18. }
  19. @$server->push($client, json_encode($ret, 256));
  20. }
  21. });
  22. // 客户端关闭连接时触发此回调函数
  23. $server->on('close', function ($ser, $fd) {
  24. });
  25. // 启动服务
  26. $server->start();

html页面

创建一个简单可用的swoole聊天室

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>在线聊天室</title>
  6. <meta name="viewport" content="width=device-width, initial-scale=1">
  7. <link rel="stylesheet" href="css/reset.min.css">
  8. <link rel="stylesheet" href="css/style.css">
  9. </head>
  10. <body>
  11. <div class="wrapper">
  12. <div class="container">
  13. <div class="left">
  14. <div class="top"> 在线人员</div>
  15. <ul class="people">
  16. <li class="person" data-chat="person1">
  17. <img src="img/thomas.jpg" alt=""/>
  18. <span class="name">张三</span>
  19. <span class="time">10:09</span>
  20. </li>
  21. <li class="person" data-chat="person2">
  22. <img src="img/dog.png" alt=""/>
  23. <span class="name">李四</span>
  24. <span class="time">10:44</span>
  25. </li>
  26. <li class="person" data-chat="person3">
  27. <img src="img/louis-ck.jpeg" alt=""/>
  28. <span class="name">王五</span>
  29. <span class="time">10:50</span>
  30. </li>
  31. </ul>
  32. </div>
  33. <div class="right">
  34. <div class="top"><span><span class="name">聊天室</span></span></div>
  35. <div class="chat" data-chat="person2">
  36. <template v-for="item in msglist">
  37. <div :class="item.style">
  38. {{ item.data }}
  39. </div>
  40. </template>
  41. </div>
  42. <div class="write">
  43. <input type="text" v-model="msg" placeholder="输入内容" @keydown.enter="send"/>
  44. <!-- vue 修饰符 once prevent stop enter shift alt -->
  45. <a @click.prevent="send" class="write-link send"></a>
  46. </div>
  47. </div>
  48. </div>
  49. </div>
  50. <script src="js/index.js"></script>
  51. <script src="js/vue.js"></script>
  52. <script>
  53. // 客户端连接websocket服务器端
  54. const ws = new WebSocket('ws://175.24.114.149:6060');
  55. // 事件监听
  56. // 建议时事件
  57. ws.onopen = () => {
  58. console.log('连接建立')
  59. };
  60. // 接受消息事件
  61. ws.onmessage = ({data}) => {
  62. // 返回的是一个json字符串,json字符串转为对象 es6提供一个方法
  63. let json = JSON.parse(data);
  64. // 使用vue提供变异方法
  65. vm.msglist.push(json);
  66. };
  67. // 实例化 主组件中,data是用的对象非函数 子组件data用的是函数返回一个对象
  68. const vm = new Vue({
  69. el: '.wrapper',
  70. data: {
  71. msg: '',
  72. // 消息列表
  73. msglist: []
  74. },
  75. methods: {
  76. // 发送消息事件
  77. send() {
  78. ws.send(this.msg);
  79. this.msg = '';
  80. }
  81. }
  82. });
  83. </script>
  84. </body>
  85. </html>

原文链接:http://www.cnblogs.com/jurij/p/14246477.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号