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

 

最新文章

  1. 同步、更新、下载Android Source &amp; SDK from 国内镜像站(转载)
  2. ZOJ 3711 Give Me Your Hand
  3. 【翻译十五】-java并发之固定对象与实例
  4. safeNet
  5. sql新增后返回主键
  6. 源代码版本控制工具TortoiseSVN,AnkhSVN最新版本下载地址
  7. Mysql主从备份、主主备份
  8. zabbix安装配置
  9. session和cookie作用原理,区别
  10. IIS 应用程序池自动停止
  11. shareInstance
  12. Mysql——Navicat 连接MySQL 8.0.11 出现2059错误
  13. root密码重置、Linux目录结构和远程连接Linux
  14. Code First
  15. java.net.UnknownHostException: lc001 未知的网络服务
  16. Android测试(一)——Apk文件结构以及Android组件介绍
  17. python3的unittest中使用test suite(测试套件)执行指定测试用例
  18. SpringBoot从入门到逆天(1)
  19. 记一次诡异的bug调试——————关于JDK1.7和JDK1.8中HashSet的hash(key)算法的区别
  20. 小结:双连通分量 &amp; 强连通分量 &amp; 割点 &amp; 割边

热门文章

  1. MySQL行构造器
  2. Docker Swarm 集群管理利器核心概念扫盲
  3. 踩坑了,JDK8中HashMap依然会死循环!
  4. python中random库的使用
  5. springboot完整项目,基于人人开源框架
  6. Python爬虫练习:爬取800多所大学学校排名、星级等
  7. HTML自学第一篇
  8. Java Web学习(九)网络协议详解
  9. ubuntu下一键安装pptpd
  10. Leetcode-dfs &amp; bfs