socket.php

<?php
//创建websocket服务器对象,监听0.0.0.0:9502端口
$ws = new swoole_websocket_server("0.0.0.0", ); //监听WebSocket连接打开事件 (刚打开的时候会给客户端发送 Hello,welcome)
$ws->on('open', function ($ws, $request) {
var_dump($request->fd, $request->get, $request->server);
$ws->push($request->fd, "hello, welcome\n");
}); //监听WebSocket消息事件(客户端互相发送信息)
$ws->on('message', function ($ws, $frame) {
echo "Message: {$frame->data}\n";
$ws->push($frame->fd, "server: {$frame->data}");
}); //监听WebSocket连接关闭事件
$ws->on('close', function ($ws, $fd) {
echo "client-{$fd} is closed\n";
}); $ws->start();

socket.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>socket</title> </head>
<body> </body>
<script>
var wsServer = 'ws://192.168.70.167:9503';
var websocket = new WebSocket(wsServer);
websocket.onopen = function (evt) {
console.log("Connected to WebSocket server.");
}; websocket.onclose = function (evt) {
console.log("Disconnected");
}; websocket.onmessage = function (evt) {
console.log('Retrieved data from server: ' + evt.data);
}; websocket.onerror = function (evt, e) {
console.log('Error occured: ' + evt.data);
};
</script>
</html>

socket.php,socket.html  目录/usr/local/nginx/html/下

启动socket.php:

# php socket.php

启动socket.html

浏览器打开:192.168.70.167/socket.html

其他写法:

以循环的方式给每一个用户发送信息

$ws->on('message', function ($ws, $frame) {
//echo "接收到的信息: {$frame->data}\n";
//$ws->push($frame->fd, "server: {$frame->data}");
//echo "服务器已接收:【".$frame->fd."】";
//$ws->push($frame->fd, json_encode(['hello','world'.$frame->data])); // 1.客户端发送过来的信息
$content = $frame->data;
echo "服务器接收到信息:".$content."\n";
// 2.讲消息发送个所有客户端
$arr = json_decode($content);
$id = $arr[];
$str= $arr[]; //一对一推送
$ws->push($id,$str);
// 一对多,推送 (循环方式给每一个客户端发送信息)
/*foreach ($ws->connections as $fd){
//echo "FD:".$fd."\n";
$arr = json_decode($content);
$id = $arr[0];
$str= $arr[1]; $ws->push($fd,$str);
}*/
});

最新文章

  1. jsp 分页, 判断是第一页,和最后一页.
  2. secureCRT中文乱码问题
  3. JSON-SCHEMA
  4. Linux下的字符集问题
  5. powershell小工具,efs加解密三剑客。
  6. SQL SERVER 2005快捷键+visual studio 2008 快捷键
  7. 单个input框上传多个文件操作
  8. 02. SQL表达式的灵活使用
  9. 编译安装HTTPD 2.4.9版本
  10. Careercup - Google面试题 - 4857362737266688
  11. JAVA循环结合标签使用,控制跳转
  12. SPOJ QTREE 系列解题报告
  13. 【LeetCode】Triangle 解决报告
  14. Python接口测试自动化说明及代码实例:含get、post、put、delete等方法
  15. AngularJS 1.3中的一次性数据绑定(one-time bindings)
  16. 飞鱼相册笔记(1)----外置SD卡文件夹名称不区分大小写
  17. sudoku solver(数独)
  18. CentOS Android Studio桌面图标的创建
  19. 论YUV422(YUYV)与YUV420相互转换
  20. 码云平台IDEA系列的插件使用

热门文章

  1. MIRUO面试题
  2. ORACLE 内置函数之 GREATEST 和 LEAST(转)
  3. Java多线程:AQS
  4. 网络编程(1)—TCP
  5. 关于Hook CreateMutex
  6. Scala:Functional Objects
  7. 生成springboot docker镜像 并上传到阿里云镜像厂库
  8. 基础知识:什么是ASP.NET Razor页面?
  9. error C2039: 'SetWindowTextA' : is not a member of 'CString'
  10. 【PMP】项目目标的SMART原则