PHP实现即时消息通讯

前言:

在crm开发过程中,需要实现即时消息通讯的功能,在这里选择使用一款web长连接推送框架---web-msg-sender,此框架基于WebSocket长连接通讯。 通过后台推送消息,消息可以即时推送到客户端,非轮询,实时性非常好,性能很高。

特点:

  • 多浏览器支持
  • 长连接推送(websocket或者comet),消息即时到达
  • 支持向单个/多个用户推送
  • 支持在线用户/在线页数实时统计

效果:

  • 效果1

  • 效果2

支持实时的在线人数和在线页面统计

功能实现:

一:检查/安装workerman环境

二:下载web-msg-sender并解压到项目目录下

三:启动 

(1)linux系统cd到到框架目录里运行  php start.php start -d 

(2)windows系统进入到框架目录里双击start_for_win.bat文件启动。

四:实现

(1)【接收消息】前端代码实现

<script src='http://cdn.bootcss.com/socket.io/1.3.7/socket.io.js'></script>
<script>
    // 连接服务端,xiaozhe.net:2120换成实际部署web-msg-sender服务的域名或者ip
    var socket = io('http://xiaozhe.net:2120');
    // uid可以是自己网站的用户id,以便针对uid推送以及统计在线人数,
    uid = 123;//用户登录后,这里要使用正确的用户ID
    // socket连接后以uid登录
    socket.on('connect', function(){
    	socket.emit('login', uid);
    });
    // 后端推送来消息时
    socket.on('new_msg', function(msg){
        console.log("收到消息:"+msg);
    });
    // 后端推送来在线数据时
    socket.on('update_online_count', function(online_stat){
        console.log(online_stat);
    });
</script>

(2)【发送消息】后端调用api向任意用户推送

 /**
 * 推送即时消息
 * @author Xiaozhe
 * @DateTime 2019-11-06T10:10:18+0800
 * @param    [int]                      $to_uid 用户ID
 * @param    [string]                   $msg 消息内容
 */
public function PushMsgNow($to_uid,$msg) {
    if(!$to_uid) $to_uid = "";//如果不传用户ID,则推送给全部用户
    // 推送的url地址,使用自己的服务器地址
    $push_api_url = "http://xiaozhe.net:2121/";
    $post_data = array(
       "type" => "publish",
       "content" => $msg,
       "to" => $to_uid, 
    );
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $push_api_url);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array("Expect:"));
    $return = curl_exec($ch);
    curl_close($ch);
    if ($return) {
        $code = 1;
    } else {
        $code = 0;
    }
    return $code;
}

注意事项:

(1)如果无法访问请检查服务器防火墙,如果是云服务器还要设置安全组,需要放行所需要的接口;

(2)期间,服务器重启之后,发现即时通讯无法使用,发现是重启之后,socket服务没有启动,此时把服务重新启动就可以解决,也可以添加开机启动脚本。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PHP写得及时聊天工具,结构设计的很好,有源码。是学习PHP的好资料 JeCat-Jabber(简称:JJ) 是一款完全由 PHP 开发的即时通讯软件。JJ 采用 Gtk2 图像界面库来实现用户界面。顾名思义 JJ 使用 Jabber 协议(XMPP) ,因此可以 和 包括 GTalk 在内的 其它任何 XMPP 即时通讯软件 聊天。 JJ 项目的初衷在于 演示 桌面窗口 和 PHP 多任务处理,这两大 在长期在 PHP程序员 眼中 几乎是“不可能”的任务。 同时 也是 PHP框架 JCAT 的演示项目,JCAT 是一款同时 支持 Web 和 桌面 的 PHP框架,按照计划 将在稍后 发布。 JJ 的特点 > 跨平台。JJ 在Linxu 环境下 开发,在 Windows 平台上也一样可以正常使用。 > 实用 标准的 XMPP协议,能够与其它的 Jabber 软件互相通讯,例如 Google GTalk、Pidgin、PSI、Spark、Pandion,以及其它的 Jabber网页聊天窗口 > 可更换界面皮肤,皮肤样式文件 采用 类似 CSS 的语法,便于美工独立工作。 > 纯 PHP 实现,从 通讯协议 到 图形界面,全部都由 PHP 开发,如果你正好是一名 PHP 程序员,你可以驾轻就熟地在 JJ 之上进行二次开发。 > 可整合到你的网站中。JJ 近期的完善 会使 JJ 更容易地 为你的网站所有,让你的网站 也可以有像 淘宝旺旺 那样的 专用聊天工具 [ PHP 图像界面 ] JJ 采用 Gtk图像界面库,Gtk库 中 提供了丰富的 图形界面窗体(Widget),以及灵活方便的 窗体布局方式。 Gtk 本身 被广泛应用在 Linux 平台上,Linux 最著名 的桌面环境之一 Gnome 即是众多 Gtk软件 的集中展示。 PHP-Gtk2 将 Gtk 窗体绑定到 PHP 语言中,允许程序员 通过 PHP语言 来创建、显示、销毁 Gtk 窗体。PHP-Gtk 项目由 PHP创始人 亲自负责,并且自项目创立一来 一直持续发展,目前已经支持 最新的 Gtk2。 [ PHP 多任务处理 ] PHP 直到 5.2都没有提供 稳定可靠的 多线程特性。 但 PHP 仍然有能力进行多任务处理。 多线程 因为涉及到 线程安全、线程同步 等 困难,在 支持线程的语言中,也常常建议尽量避免使用。 Linux 的多路复用 是 更稳定和安全的 多任务模式,从 PHP5.0 开始 多路复用 支持 Windows 平台。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值