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 ...
随机推荐
- CSS scroll-behavior和JS scrollIntoView让页面滚动平滑
转自 https://www.zhangxinxu.com/wordpress/2018/10/scroll-behavior-scrollintoview-%E5%B9%B3%E6%BB%91%E6 ...
- Yaml语法使用
YAML概要 1. 认识 YAML YAML是一个类似 XML.JSON 的标记性语言.YAML 强调以数据为中心,并不是以标识语言为重点.因而 YAML 本身的定义比较简单,号称“一种人性化的数据格 ...
- Python简单实现决策树
__author__ = '糖衣豆豆' #决策树 import pandas as pda fname="~/coding/python/data/lesson.csv" data ...
- 在CentOS6.9上Shell脚本定时释放内存cache
一.写Shell脚本 mkdir -p /var/script/ vim /var/script/freemem.sh 写入以下Shell脚本: #!/bin/bash # 当前已使用的内存大小 us ...
- shiro框架-配置
才开始学没有什么理解分享一个博客写的比较详细 借鉴大佬的:https://www.cnblogs.com/maofa/p/6407102.html@阿发仔 https://blog.csdn.net ...
- 亚马逊(Review、Feedback)差评怎么处理?
移除亚马逊Review差评,我看也就这三招靠谱点! 亚马逊特别重视review,差评会直接影响到listing的浏览量和销量,甚至还可以摧毁一个账号.遇到一个差的review怎么办?网上看到很多讲移除 ...
- LeetCode--034--在排序数组中查找元素的第一个和最后一个位置(java)
给定一个按照升序排列的整数数组 nums,和一个目标值 target.找出给定目标值在数组中的开始位置和结束位置. 你的算法时间复杂度必须是 O(log n) 级别. 如果数组中不存在目标值,返回 [ ...
- cowboy源码分析(一)
前段时间导读了ranch的源码,具体见ranch 源码分析(一), 现在整理了下ranch框架下经典应用cowboy. 源码地方:https://github.com/ninenines/cowboy ...
- js 批量提交数据
// 批量提交数据 let pageSize = 100, total = dataTmp.length, list = dataTmp let totalPage = Math.ceil(total ...
- python 对象存储OSS 阿里云
SDK参考 ->python->上传文件->简单上传 # -*- coding: utf-8 -*- import oss2 auth=oss2.Auth('<yourAcc ...