php 消息推送(含源码)

WBOY
Release: 2016-06-23 13:36:21
Original
959 people have browsed it

概述

今天刚好周六,昨天有人在群里问如何实习php的即时通讯。我也搜了搜资料,打算自己实现一遍php消息推送中的-ajax长轮询的。我觉得对php即时通讯的介绍写得比较好的是:

可以参考一下,其他我就不多说了,参考链接,优于用于演示,就没有操作数据库中的东西了。

我的代码

入口代码 index.html

<!DOCTYPE HTML><html><head>    <title>反ajax推送</title>    <style> .send{color:#555;text-align: left;} .require{color:blue;text-align: right;} .content_box{text-align: center;margin: 20px; border: 1px solid #ddd;padding: 20px;} </style>    <script src="http://code.jquery.com/jquery-1.11.2.min.js"></script></head><body>    <div class="content_box" id="content_box_title" style="border: none;">消息框</div>    <div class="content_box" id="content_box">    </div>    <div style="width: 450px;margin: 0 auto;">        <select id="username" style="font-size: 20px;">            <option value="1" selected="selected">1</option>            <option value="2">2</option>        </select>        <input type="text" style="font-size: 20px;" value="" id="send_text">        <button id="btn_send" style="font-size: 20px;">发送</button>        <button id="btn_link" style="font-size: 20px">连接</button>    </div>    <div class="error_tip" id="error_tip" style="color: red;">    </div>    <script> $(function(){ //发送消息 $('#btn_send').click(function(){ var send_text = $('#send_text').val(); if(send_text.length <= 0){ $('#error_tip').html('不能输入空值'); }else{ send(send_text); } }); //按回车键发送消息 $('#send_text').on('keyup',function(e){ if(e.keyCode == 13){ $('#btn_send').trigger('click'); } }); //建立通讯链接 $('#btn_link').click(function(){ connect(); var _this = $(this); _this.attr('disabled',true); _this.html('已连接'); }); }); //建立通讯连接函数 function connect(){ $('#content_box_title').html($('#username').val()+'的消息窗口'); $.ajax({ data:{'user':$('#username').val()}, url:'ajaxPush.php', type:'get', timeout:0, dataType:'json', success:function(data){ $('#content_box').append('<div class="require">'+data.msg+'</div>'); connect(); } }); } //发送消息函数 function send(massege){ var user =$('#username').val(); $.getJSON('write.php',{'msg':massege,'user':user},function(data){ if(data.sf){ $('#content_box').append('<div class="send">'+massege+'</div>'); $('#send_text').val(''); }else{ $('#error_tip').html('输入保存错误!'); } }); } </script></body></html>
Copy after login

ajax处理输入 write.php

<?php/** * Created by TXM. * Time: 2015/4/18 13:13 * function: */$filename  = dirname(__FILE__).'/data.txt';$isread_file = dirname(__FILE__).'/isread.txt';$user = dirname(__FILE__).'/user.txt';//写入消息,消息未读,谁发送的消息file_put_contents($filename,$_GET['msg']);file_put_contents($isread_file,'0');file_put_contents($user,$_GET['user']);echo json_encode(array('sf'=>true));
Copy after login

长轮询推送 ajaxPush.php

<?php/** * Created by TXM. * Time: 2015/4/18 13:12 * function: */$filename  = dirname(__FILE__).'/data.txt';$isread_file = dirname(__FILE__).'/isread.txt';$userfile = dirname(__FILE__).'/user.txt';$get_user = $_GET['user'] == '1'?'2':'1';$msg='';while(1){    $msg = file_get_contents($filename);    $isread = file_get_contents($isread_file);    $user = file_get_contents($userfile);    //是对方发送的消息,设置消息已读,退出循环。    if($isread == '0' && $get_user == $user){        file_put_contents($isread_file,'1');        break;    }    sleep(1);}echo json_encode(array('msg'=>$msg));
Copy after login

效果

源码下载地址

http://pan.baidu.com/s/1pJ5elpp

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template