server.php

  1. <?php
  2. class Chat
  3. {
  4. const HOST = '0.0.0.0';//ip地址 0.0.0.0代表接受所有ip的访问
  5. const PART = 9501;//端口号
  6.  
  7. private $server = null;//单例存放websocket_server对象
  8.  
  9. public function __construct()
  10. {
  11. //实例化swoole_websocket_server并存储在我们Chat类中的属性上,达到单例的设计
  12. $this->server = new swoole_websocket_server(self::HOST, self::PART);
  13. //监听连接事件
  14. $this->server->on('open', [$this, 'onOpen']);
  15. //监听接收消息事件
  16. $this->server->on('message', [$this, 'onMessage']);
  17. //监听关闭事件
  18. $this->server->on('close', [$this, 'onClose']);
  19. //设置允许访问静态文件
  20.  
  21. //开启服务
  22. $this->server->start();
  23. }
  24.  
  25. /**
  26. * 连接成功回调函数
  27. * @param $server
  28. * @param $request
  29. */
  30. public function onOpen($server, $request)
  31. {
  32. echo $request->fd . '连接了' . PHP_EOL;//打印到我们终端
  33. $server->push($request->fd,"服务端收到你的连接了");
  34. }
  35.  
  36. /**
  37. * 接收到信息的回调函数
  38. * @param $server
  39. * @param $frame
  40. */
  41. public function onMessage($server, $frame)
  42. {
  43. var_dump("收到客户端消息:".$frame->data);
  44. $server->push($frame->fd, "服务端收到你的消息了".$frame->data);
  45. Swoole\Timer::tick(1000, function() use($server,$frame){
  46. $server->push($frame->fd, "当前时间".date("Y-m-d H:i:s"));
  47. });
  48.  
  49. }
  50.  
  51. /**
  52. * 断开连接回调函数
  53. * @param $server
  54. * @param $fd
  55. */
  56. public function onClose($server, $fd)
  57. {
  58. echo $fd . '走了' . PHP_EOL;//打印到我们终端
  59. }
  60.  
  61. }
  62.  
  63. $obj = new Chat();

  

index.html

  1. <!--ws_client.html-->
  2. <head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> </head>
  3. <h1>模拟Web Socket客户端·向服务端投递Task任务</h1>
  4. <script>
  5. var wsUrl = "ws://192.168.40.10:9501";
  6. var webSocket = new WebSocket(wsUrl);
  7.  
  8. //实例化JavaScript连接事件
  9. webSocket.onopen = function(evt){
  10. webSocket.send("我正在模拟向服务端发送消息");
  11. console.log("连接WebSocket成功!");
  12. }
  13.  
  14. //实例化onmessage
  15. webSocket.onmessage = function(evt){
  16. console.log("服务端说:" + evt.data);
  17. }
  18.  
  19. //实例化onclose事件
  20. webSocket.onclose = function(evt){
  21. console.log("Web Socket连接关闭");
  22. }
  23.  
  24. //实例化onerror事件
  25. webSocket.onerror = function(evt,e){
  26. console.log("好像有些错误:" + evt.data);
  27. }
  28. </script>

 php server.php

 

swoole 客户端和服务端不断通信的更多相关文章

  1. 用PHP的socket实现客户端到服务端的通信

    服务端 <?php error_reporting(E_ALL); set_time_limit(0); ob_implicit_flush(); //本地IP $address = 'loca ...

  2. linux网络编程之用socket实现简单客户端和服务端的通信(基于UDP)

    单客户端和服务端的通信(基于UDP)   代码 服务端代码socket3.c #include<sys/types.h> #include<sys/socket.h> #inc ...

  3. C# Winform 通过Socket实现客户端和服务端TCP通信

    操作界面如下: 1.声明Socket 第一个参数:寻址方式,第二个参数:传输数据的方式,第三个参数:通信协议 Socket socket = new Socket(AddressFamily.Inte ...

  4. python实现一个客户端与服务端的通信

    函数介绍 Socket对象方法: 服务端: 函数 描述 .bind() 绑定地址关键字,AF_INET下以元组的形式表示地址.常用bind((host,port)) .listen() 监听TCP,可 ...

  5. Netty入门之客户端与服务端通信(二)

    Netty入门之客户端与服务端通信(二) 一.简介 在上一篇博文中笔者写了关于Netty入门级的Hello World程序.书接上回,本博文是关于客户端与服务端的通信,感觉也没什么好说的了,直接上代码 ...

  6. 实验09——java基于TCP实现客户端与服务端通信

    TCP通信         需要先创建连接 - 并且在创建连接的过程中 需要经过三次握手        底层通过 流 发送数据 数据没有大小限制        可靠的传输机制 - 丢包重发 包的顺序的 ...

  7. socket 通信 入门3 android 客户端 C# 服务端

    这是一个android端操控服务器的例子  就是发送简单指令到服务器  然后服务器响应什么的... 当然这里是未完成的  只是简单展示一下大致思路 首先连接建立起来后  服务端给客户端一条信息  告诉 ...

  8. Android BLE与终端通信(三)——客户端与服务端通信过程以及实现数据通信

    Android BLE与终端通信(三)--客户端与服务端通信过程以及实现数据通信 前面的终究只是小知识点,上不了台面,也只能算是起到一个科普的作用,而同步到实际的开发上去,今天就来延续前两篇实现蓝牙主 ...

  9. Netty入门——客户端与服务端通信

    Netty简介Netty是一个基于JAVA NIO 类库的异步通信框架,它的架构特点是:异步非阻塞.基于事件驱动.高性能.高可靠性和高可定制性.换句话说,Netty是一个NIO框架,使用它可以简单快速 ...

随机推荐

  1. 必考算法之 Top K 问题

    大家好,这里是<齐姐聊算法>系列之 Top K 问题. Top K 问题是面试中非常常考的算法题. 8 Leetcode 上这两题大同小异,这里以第一题为例. 题意: 给一组词,统计出现频 ...

  2. asp.net中的日志添加和未处理异常的记录

    1.第一次写博客如有错误欢迎纠正.邮箱:Jiangwenyuan0217@163.com: 2.此博客可能对初学者有些帮助,对哪些骨灰级的程序员来说都是分分钟的事了,所以就不用在这里费时间了. 环境说 ...

  3. Redis Cluster集群架构实现

    Redis集群简介 通过前面三篇博客的介绍<Redis基础认识及常用命令使用(一)–技术流ken>,<Redis基础知识补充及持久化.备份介绍(二)–技术流ken>,<R ...

  4. elasticsearch 索引清理脚本及常用命令

    elastic索引日志清理不及时,很容易产生磁盘紧张,官网给出curl -k -XDELETE可以清理不需要的索引日志. 清理脚本 #!/bin/bash #Author: 648403020@qq. ...

  5. nginx的安装和启动

    https://www.cnblogs.com/wyd168/p/6636529.html nginx开机启动 https://www.cnblogs.com/gimin/p/8893559.html

  6. spring mvc(2) spring mvc初体验

    前面讲到随着前端技术的发展,web的开发已经实现了前后分离,并且spring mvc经过多个版本的更新,使用上也变得不一样,并且提供了很多便捷的功能.但是为了便于理解,我们使用比较原始的方式搭建spr ...

  7. 现在有T1、T2、T3三个线程,你怎样保证T2在T1执行完后执行,T3在T2执行完后执行?

    Thread t1 = new Thread(new T1()); Thread t2 = new Thread(new T2()); Thread t3 = new Thread(new T3()) ...

  8. profile对比std::regex与boost::regex的性能

    c++11标准库的regex比boost库的regex之间的性能差距接近5倍,这是为什么?stackflow上也找到一篇post<c++11 regex slower than python&g ...

  9. Python3基础数据类型(数字、字符串、元组、列表、集合、字典)

    笔记参考了菜鸟教程 Python 中的变量不需要声明,赋值才创建.赋值给变量的是什么类型变量就是什么类型 多个变量赋值 1 a, b, c = 1, 2, "runoob" 标准数 ...

  10. spring cloud consul 服务治理

    对照系统安装响应consul文件(以window为例) 解压文件之后配置环境,进入Path添加文件所在目录, 测试:在文件所在目录下进入指令操作 输入 consul agent -dev 启动成功,在 ...