热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

php私信通讯怎么设置

导读:今天编程笔记来给各位分享关于php私信通讯怎么设置的相关内容,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!本文目录一览:1、如何在php后端及时推送消息给客户端2、php怎样写

导读:今天编程笔记来给各位分享关于php私信通讯怎么设置的相关内容,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:


  • 1、如何在php后端及时推送消息给客户端


  • 2、php怎样写一个用户之间发私信功能,表应该怎么设计?


  • 3、php怎么实现即时通讯

如何在php后端及时推送消息给客户端

后端代码

push.php

?php

use Workerman\Worker;

require_once './Workerman/Autoloader.php';

// 初始化一个worker容器,监听1234端口

$worker = new Worker('websocket://0.0.0.0:1234');

// 这里进程数必须设置为1

$worker-count = 1;

// worker进程启动后建立一个内部通讯端口

$worker-OnWorkerStart= function($worker)

{

// 开启一个内部端口,方便内部系统推送数据,Text协议格式 文本+换行符

$inner_text_worker = new Worker('Text://0.0.0.0:5678');

$inner_text_worker-OnMessage= function($connection, $buffer)

{

global $worker;

// $data数组格式,里面有uid,表示向那个uid的页面推送数据

$data = json_decode($buffer, true);

$uid = $data['uid'];

// 通过workerman,向uid的页面推送数据

$ret = sendMessageByUid($uid, $buffer);

// 返回推送结果

$connection-send($ret ? 'ok' : 'fail');

};

$inner_text_worker-listen();

};

// 新增加一个属性,用来保存uid到connection的映射

$worker-uidCOnnections= array();

// 当有客户端发来消息时执行的回调函数

$worker-OnMessage= function($connection, $data)use($worker)

{

// 判断当前客户端是否已经验证,既是否设置了uid

if(!isset($connection-uid))

{

// 没验证的话把第一个包当做uid(这里为了方便演示,没做真正的验证)

$connection-uid = $data;

/* 保存uid到connection的映射,这样可以方便的通过uid查找connection,

* 实现针对特定uid推送数据

*/

$worker-uidConnections[$connection-uid] = $connection;

return;

}

};

// 当有客户端连接断开时

$worker-OnClose= function($connection)use($worker)

{

global $worker;

if(isset($connection-uid))

{

// 连接断开时删除映射

unset($worker-uidConnections[$connection-uid]);

}

};

// 向所有验证的用户推送数据

function broadcast($message)

{

global $worker;

foreach($worker-uidConnections as $connection)

{

$connection-send($message);

}

}

// 针对uid推送数据

function sendMessageByUid($uid, $message)

{

global $worker;

if(isset($worker-uidConnections[$uid]))

{

$cOnnection= $worker-uidConnections[$uid];

$connection-send($message);

return true;

}

return false;

}

// 运行所有的worker(其实当前只定义了一个)

Worker::runAll();

启动后端服务

php push.php start -d

前端接收推送的js代码

var ws = new WebSocket('ws://127.0.0.1:1234');

ws.Onopen= function(){

var uid = 'uid1';

ws.send(uid);

};

ws.Onmessage= function(e){

alert(e.data);

};

后端推送消息的代码

// 建立socket连接到内部推送端口

$client = stream_socket_client('tcp://127.0.0.1:5678', $errno, $errmsg, 1, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT);

// 推送的数据,包含uid字段,表示是给这个uid推送

$data = array('uid'='uid1', 'percent'='88%');

// 发送数据,注意5678端口是Text协议的端口,Text协议需要在数据末尾加上换行符

fwrite($client, json_encode($data)."\n");

// 读取推送结果

echo fread($client, 8192);

这里的uid不一定是用户的id,也可以理解为任务id即 taskid

php怎样写一个用户之间发私信功能,表应该怎么设计?

基本上就6个字段

id 序号

from_userid 发送者

to_userid 接受者

title 私信标题

message 私信内容

status 状态(已读未读)

php怎么实现即时通讯

php实现实时通信一般有两种方式:socket或comet。

socket是比较好的解决方案,问题在于不是所有的浏览器都兼容,服务器端实现起来也稍微有点麻烦。

comet(基于HTTP长连接的"服务器推")实现起来更加方便,而且兼容所有的浏览器。

comet也有好几种实现方式,如iframe, http long request等。

结语:以上就是编程笔记为大家整理的关于php私信通讯怎么设置的全部内容了,感谢您花时间阅读本站内容,希望对您有所帮助,更多关于php私信通讯怎么设置的相关内容别忘了在本站进行查找喔。


推荐阅读
  • VueCLI多页分目录打包的步骤记录
    本文介绍了使用VueCLI进行多页分目录打包的步骤,包括页面目录结构、安装依赖、获取Vue CLI需要的多页对象等内容。同时还提供了自定义不同模块页面标题的方法。 ... [详细]
  • 移动端常用单位——rem的使用方法和注意事项
    本文介绍了移动端常用的单位rem的使用方法和注意事项,包括px、%、em、vw、vh等其他常用单位的比较。同时还介绍了如何通过JS获取视口宽度并动态调整rem的值,以适应不同设备的屏幕大小。此外,还提到了rem目前在移动端的主流地位。 ... [详细]
  • 本文介绍了在实现了System.Collections.Generic.IDictionary接口的泛型字典类中如何使用foreach循环来枚举字典中的键值对。同时还讨论了非泛型字典类和泛型字典类在foreach循环中使用的不同类型,以及使用KeyValuePair类型在foreach循环中枚举泛型字典类的优势。阅读本文可以帮助您更好地理解泛型字典类的使用和性能优化。 ... [详细]
  • Ihaveaforminadirectivetemplate:我在指令模板中有一个表单:<formn ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • Webpack5内置处理图片资源的配置方法
    本文介绍了在Webpack5中处理图片资源的配置方法。在Webpack4中,我们需要使用file-loader和url-loader来处理图片资源,但是在Webpack5中,这两个Loader的功能已经被内置到Webpack中,我们只需要简单配置即可实现图片资源的处理。本文还介绍了一些常用的配置方法,如匹配不同类型的图片文件、设置输出路径等。通过本文的学习,读者可以快速掌握Webpack5处理图片资源的方法。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • 利用Visual Basic开发SAP接口程序初探的方法与原理
    本文介绍了利用Visual Basic开发SAP接口程序的方法与原理,以及SAP R/3系统的特点和二次开发平台ABAP的使用。通过程序接口自动读取SAP R/3的数据表或视图,在外部进行处理和利用水晶报表等工具生成符合中国人习惯的报表样式。具体介绍了RFC调用的原理和模型,并强调本文主要不讨论SAP R/3函数的开发,而是针对使用SAP的公司的非ABAP开发人员提供了初步的接口程序开发指导。 ... [详细]
  • 解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法
    本文介绍了解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法,包括检查location配置是否正确、pass_proxy是否需要加“/”等。同时,还介绍了修改nginx的error.log日志级别为debug,以便查看详细日志信息。 ... [详细]
  • 图像因存在错误而无法显示 ... [详细]
  • 如何在HTML中获取鼠标的当前位置
    本文介绍了在HTML中获取鼠标当前位置的三种方法,分别是相对于屏幕的位置、相对于窗口的位置以及考虑了页面滚动因素的位置。通过这些方法可以准确获取鼠标的坐标信息。 ... [详细]
author-avatar
啊啦哈200601
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有