php websocket
php websocket项目开发,推荐使用:Workerman
本片内容使用Workerman实现了简单的及时聊天功能,具体代码如下:
<?php
// phpinfo();
header('Content-Type: text/html; charset=utf-8'); require 'vendor/autoload.php'; use Workerman\Worker; $sk=new Sock(); //对创建的socket循环进行监听,处理数据
$sk->run(); function array_remove($arr, $key){
if(!array_key_exists($key, $arr)){
return $arr;
}
$keys = array_keys($arr);
$index = array_search($key, $keys);
if($index !== FALSE){
array_splice($arr, $index, 1);
}
return $arr; } class Sock{
public $sockets; //socket的连接池,即client连接进来的socket标志
public $ws_worker; public function __construct(){ // Create a Websocket server
$this->ws_worker = new Worker("websocket://0.0.0.0:8889"); // 4 processes
$this->ws_worker->count = 4; // Emitted when new connection come
$this->ws_worker->onConnect = function($connection)
{
echo "New connection\n";
echo 'id=' . $connection->id . ' ';
$this->sockets[$connection->id] = array('client'=>$connection);
echo 'count=' . count($this->sockets) . ' '; }; // Emitted when data received
$this->ws_worker->onMessage = function($connection, $data)
{
// Send hello $data
echo "\n".$connection->id." -> req: ".$data;
$jdata = json_decode($data,true);
echo "\n op: ".$jdata['op'];
if($jdata['op'] == 'login'){
//{'op':'login','user':user}
$cs = $this->sockets[$connection->id];
$cs['user'] = $jdata['user'];
$this->sockets[$connection->id] = $cs;
$connection->send($jdata['user'].'登录成功');
return;
}else{
// {'op':'chat','from_user':user,'to_user':user,'msg':msg}
$deal = false;
if($jdata['op'] == 'chat'){
foreach ($this->sockets as $key => $value) {
if($value['user'] == $jdata['to_user']){
$value['client']->send($jdata['msg']);
$connection->send($data);
$deal = true;
}
}
if($deal == false){
$connection->send($jdata['user'].'会员不存在');
}
}else{
$connection->send('参数异常: ' . $data);
}
} }; // Emitted when connection closed
$this->ws_worker->onClose = function($connection)
{
echo "Connection closed\n";
$this->sockets = array_remove($this->sockets, $connection->id);
};
} public function run(){
Worker::runAll();
}
}
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script src="jquery.js" type="text/javascript"></script> </head>
<body>
<input type="text" id="input" placeholder="Message…" />
<hr />
<pre id="output"></pre> <script>
var user = '';
var host = 'ws://127.0.0.1:8889';
var socket = null;
var input = document.getElementById('input');
var output = document.getElementById('output');
var print = function (message) {
var samp = document.createElement('samp');
samp.innerHTML = message + '\n';
output.appendChild(samp); return;
}; user = window.prompt("欢迎?","请在此输入您的姓名。"); input.addEventListener('keyup', function (evt) {
if (13 === evt.keyCode) {
var msg = input.value; if (!msg) {
return;
} try {
socket.send(msg);
input.value = '';
input.focus();
} catch (e) {
console.log(e);
} return;
}
}); try {
socket = new WebSocket(host);
socket.onopen = function () {
print('connection is opened');
input.focus();
socket.send('{"op":"login","user":"'+user+'"}');
return;
};
socket.onmessage = function (msg) {
print(msg.data); return;
};
socket.onclose = function () {
print('connection is closed'); return;
}; } catch (e) {
console.log(e);
}
</script>
</body>
</html>
使用 php socket.php 启动服务端。
js端要发起json结构的数据,如下截图:

php websocket的更多相关文章
- 漫扯:从polling到Websocket
Http被设计成了一个单向的通信的协议,即客户端发起一个request,然后服务器回应一个response.这让服务器很为恼火:我特么才是老大,我居然不能给小弟发消息... 轮询 老大发火了,小弟们自 ...
- 细说WebSocket - Node篇
在上一篇提高到了 web 通信的各种方式,包括 轮询.长连接 以及各种 HTML5 中提到的手段.本文将详细描述 WebSocket协议 在 web通讯 中的实现. 一.WebSocket 协议 1. ...
- java使用websocket,并且获取HttpSession,源码分析
转载请在页首注明作者与出处 http://www.cnblogs.com/zhuxiaojie/p/6238826.html 一:本文使用范围 此文不仅仅局限于spring boot,普通的sprin ...
- WebSocket - ( 一.概述 )
说到 WebSocket,不得不提 HTML5,作为近年来Web技术领域最大的改进与变化,包含CSS3.离线与存储.多媒体.连接性( Connectivity )等一系列领域,而即将介绍的 WebSo ...
- php+websocket搭建简易聊天室实践
1.前言 公司游戏里面有个简单的聊天室,了解了之后才知道是node+websocket做的,想想php也来做个简单的聊天室.于是搜集各种资料看文档.找实例自己也写了个简单的聊天室. http连接分为短 ...
- Demo源码放送:打通B/S与C/S !让HTML5 WebSocket与.NET Socket公用同一个服务端!
随着HTML5 WebSocket技术的日益成熟与普及,我们可以借助WebSocket来更加方便地打通BS与CS -- 因为B/S中的WebSocket可以直接连接到C/S的服务端,并进行双向通信.如 ...
- Cowboy 开源 WebSocket 网络库
Cowboy.WebSockets 是一个托管在 GitHub 上的基于 .NET/C# 实现的开源 WebSocket 网络库,其完整的实现了 RFC 6455 (The WebSocket Pro ...
- 借助Nodejs探究WebSocket
文章导读: 一.概述-what's WebSocket? 二.运行在浏览器中的WebSocket客户端+使用ws模块搭建的简单服务器 三.Node中的WebSocket 四.socket.io 五.扩 ...
- 细说websocket - php篇
下面我画了一个图演示 client 和 server 之间建立 websocket 连接时握手部分,这个部分在 node 中可以十分轻松的完成,因为 node 提供的 net 模块已经对 socket ...
- webSocket and LKDBHelper的使用说明
socketket与lkdbhelper来处理数据 客户需求: 当我们有需要从自己的后台推送消息给我们的用户时,用户需要实时的接收到来自我们的推送消息.前提是没有使用第三方的推送框架,那么这个使用we ...
随机推荐
- 稠州银行数字化转型:打造银行数据大脑,建立全新数字化DNA
数字经济时代,银行如何进行数字化转型?业务模式转型与科技转型如何协同并进? 2019年1月4日,在上海蚂蚁金服ATEC城市峰会上,浙江稠州商业银行(以下简称“稠州银行”)副行长兼首席信息官程杰分享了稠 ...
- 'telnet' 不是内部或外部命令,也不是可运行的程序
1.打开控制面板 2. 3. 4.这样就好可,重新打开cmd命令.
- rtf乱码解决办法
首先,阐述下rtf,富文本格式文档,目前常用来做模板: 我遇到的问题是rtf中替换后的文本显示是正常的,rtf直接转pdf就不正常了,通过notpad++ 打开后发现rtf本身内容编码是我没有见过的( ...
- newnewFoogetName高级面试题
- centos 7 安装二进制mysql 详细步骤
1 下载地址:https://cdn.mysql.com//Downloads/MySQL-5.7/mysql-5.7.24-linux-glibc2.12-x86_64.tar.gz 复制这个链接在 ...
- 【Oracle】【9】阅读oracle执行计划
正文: 工具:PLSQL 1,配置执行计划需要显示的项 工具→首选项→窗口类型→计划窗口→根据需要配置要显示在执行计划中的列 2,打开执行计划 在SQL窗口执行完一条select语句后按 F5 即可查 ...
- 用oracle自带的ssh脚本配置互信
./sshUserSetup.sh -user 用户名 -hosts "主机名1 主机名2 主机名3 ..." -advanced -noPromptPassphrase 这个 ...
- 关于ckeditor5设置高度
在管理端模板AdminBSBMaterialDesign-master里发现一个比百度编辑器看起来更高大上的编辑器:ckeditor.模板中使用的是版本4,自己在官网上下载了最新版本.在之前的版本,使 ...
- sap快捷登录
利用程序SAPSHCUT.EXE 示例:sapshcut -type=Transaction -system=IDS -client=800 -user=barry -pw=123456 -l ...
- socket架构
套接字基本概念 Socket是应用层与Tcp/ip协议族通信的中间软件抽象层,它是一组接口.在设计模式中,socket其实就是一个门面模式,它把复杂的tcp/ip协议族隐藏在socket接口后面,对用 ...