swoole 客户端和服务端不断通信
server.php
- <?php
- class Chat
- {
- const HOST = '0.0.0.0';//ip地址 0.0.0.0代表接受所有ip的访问
- const PART = 9501;//端口号
- private $server = null;//单例存放websocket_server对象
- public function __construct()
- {
- //实例化swoole_websocket_server并存储在我们Chat类中的属性上,达到单例的设计
- $this->server = new swoole_websocket_server(self::HOST, self::PART);
- //监听连接事件
- $this->server->on('open', [$this, 'onOpen']);
- //监听接收消息事件
- $this->server->on('message', [$this, 'onMessage']);
- //监听关闭事件
- $this->server->on('close', [$this, 'onClose']);
- //设置允许访问静态文件
- //开启服务
- $this->server->start();
- }
- /**
- * 连接成功回调函数
- * @param $server
- * @param $request
- */
- public function onOpen($server, $request)
- {
- echo $request->fd . '连接了' . PHP_EOL;//打印到我们终端
- $server->push($request->fd,"服务端收到你的连接了");
- }
- /**
- * 接收到信息的回调函数
- * @param $server
- * @param $frame
- */
- public function onMessage($server, $frame)
- {
- var_dump("收到客户端消息:".$frame->data);
- $server->push($frame->fd, "服务端收到你的消息了".$frame->data);
- Swoole\Timer::tick(1000, function() use($server,$frame){
- $server->push($frame->fd, "当前时间".date("Y-m-d H:i:s"));
- });
- }
- /**
- * 断开连接回调函数
- * @param $server
- * @param $fd
- */
- public function onClose($server, $fd)
- {
- echo $fd . '走了' . PHP_EOL;//打印到我们终端
- }
- }
- $obj = new Chat();
index.html
- <!--ws_client.html-->
- <head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> </head>
- <h1>模拟Web Socket客户端·向服务端投递Task任务</h1>
- <script>
- var wsUrl = "ws://192.168.40.10:9501";
- var webSocket = new WebSocket(wsUrl);
- //实例化JavaScript连接事件
- webSocket.onopen = function(evt){
- webSocket.send("我正在模拟向服务端发送消息");
- console.log("连接WebSocket成功!");
- }
- //实例化onmessage
- webSocket.onmessage = function(evt){
- console.log("服务端说:" + evt.data);
- }
- //实例化onclose事件
- webSocket.onclose = function(evt){
- console.log("Web Socket连接关闭");
- }
- //实例化onerror事件
- webSocket.onerror = function(evt,e){
- console.log("好像有些错误:" + evt.data);
- }
- </script>
php server.php
swoole 客户端和服务端不断通信的更多相关文章
- 用PHP的socket实现客户端到服务端的通信
服务端 <?php error_reporting(E_ALL); set_time_limit(0); ob_implicit_flush(); //本地IP $address = 'loca ...
- linux网络编程之用socket实现简单客户端和服务端的通信(基于UDP)
单客户端和服务端的通信(基于UDP) 代码 服务端代码socket3.c #include<sys/types.h> #include<sys/socket.h> #inc ...
- C# Winform 通过Socket实现客户端和服务端TCP通信
操作界面如下: 1.声明Socket 第一个参数:寻址方式,第二个参数:传输数据的方式,第三个参数:通信协议 Socket socket = new Socket(AddressFamily.Inte ...
- python实现一个客户端与服务端的通信
函数介绍 Socket对象方法: 服务端: 函数 描述 .bind() 绑定地址关键字,AF_INET下以元组的形式表示地址.常用bind((host,port)) .listen() 监听TCP,可 ...
- Netty入门之客户端与服务端通信(二)
Netty入门之客户端与服务端通信(二) 一.简介 在上一篇博文中笔者写了关于Netty入门级的Hello World程序.书接上回,本博文是关于客户端与服务端的通信,感觉也没什么好说的了,直接上代码 ...
- 实验09——java基于TCP实现客户端与服务端通信
TCP通信 需要先创建连接 - 并且在创建连接的过程中 需要经过三次握手 底层通过 流 发送数据 数据没有大小限制 可靠的传输机制 - 丢包重发 包的顺序的 ...
- socket 通信 入门3 android 客户端 C# 服务端
这是一个android端操控服务器的例子 就是发送简单指令到服务器 然后服务器响应什么的... 当然这里是未完成的 只是简单展示一下大致思路 首先连接建立起来后 服务端给客户端一条信息 告诉 ...
- Android BLE与终端通信(三)——客户端与服务端通信过程以及实现数据通信
Android BLE与终端通信(三)--客户端与服务端通信过程以及实现数据通信 前面的终究只是小知识点,上不了台面,也只能算是起到一个科普的作用,而同步到实际的开发上去,今天就来延续前两篇实现蓝牙主 ...
- Netty入门——客户端与服务端通信
Netty简介Netty是一个基于JAVA NIO 类库的异步通信框架,它的架构特点是:异步非阻塞.基于事件驱动.高性能.高可靠性和高可定制性.换句话说,Netty是一个NIO框架,使用它可以简单快速 ...
随机推荐
- Netty之旅三:Netty服务端启动源码分析,一梭子带走!
Netty服务端启动流程源码分析 前记 哈喽,自从上篇<Netty之旅二:口口相传的高性能Netty到底是什么?>后,迟迟两周才开启今天的Netty源码系列.源码分析的第一篇文章,下一篇我 ...
- [LeetCode]Sql系列
题目1 Employee 表包含所有员工信息,每个员工有其对应的 Id, salary 和 department Id. +----+-------+--------+--------------+ ...
- 格式化时间戳的n种方法
1 var time = new Date(ele.time).toLocaleString().split(' ')[0] 2 formatDate: function (value) { let ...
- 《k8s权威指南》读书笔记
抽空读完了<k8s权威指南>一书,对k8s的总算有了较为系统的认知. 好记忆不如多写字,以下是读书笔记 第一章 k8s入门 k8s是什么: 一个开源的容器集群管理平台,可提供容器集群的自动 ...
- 学习使用PSTools工具中的psping
目录 初识PsTools psping 1.使用ICMP ping 2.使用TCP ping 3.延迟测试 4.带宽测试 5.同功能的tcping工具 总结 初识PsTools 在工作中我们都 ...
- linux学习(三)Linux 系统目录结构
一.查看目录 登录系统后,在当前命令窗口下输入命令: ls / 树状目录结构: 二.目录解析 /bin: 存放二进制可执行文件(ls,cat,mkdir等). /boot: 存放启动Linux时使用的 ...
- svn提交代码出错
今天提交代码的时候一直报错,下面是错误信息 Error: Commit failed (details follow): Error: Commit blocked by pre-commit ho ...
- python中不需要函数重载的原因
函数重载主要是为了解决两个问题: 1.可变参数类型 2.可变参数个数 并且函数重载一个基本的设计原则是,仅仅当两个函数除了参数类型和参数个数不同以外,其功能是完全相同的,此时才使用函数重载,如果两个函 ...
- 使用jsonify返回json数据
from flask import Flask, jsonify app = Flask(__name__) json_data = [ {"name":"json&qu ...
- 将SublimeText3打造成简易Java IDE
简介与优点 使用该教程,你能使你的Sublime Text3可以作为一个精简版的JAVA IDE工具 既可以独立在cmd控制台运行也可以在Sublime自带的控制台运行 运行后不会有乱码 报错后可以在 ...