利用ajax短轮询+php与服务器交互制作简易即时聊天网站

news/2024/5/12 0:46:57/文章来源:https://blog.csdn.net/weixin_30462049/article/details/95907540

主流的Web端即时通讯方案大致有4种:传统Ajax短轮询、Comet技术、WebSocket技术、SSE(Server-sent Events)。

本文主要介绍ajax短轮询的简易实现方式。

看懂此文需要:ajax基础,php基础,mysql基础,html/jquery基础

————————————————————————————

本人也是web新手,今天听说女票在学websocket,还做了个简易的网站利用广播和我通信。但是刷新一下数据就没了。。

我觉得这个还是挺有意思的,,就想着能不能做一个刷新后数据依然存在然后可以实时显示的呢。。就跟web上的qq一样。。做一个简易的对话板

因为我不会websocket,就想着好像ajax可以实现,一查果然可以,原来ajax短轮询也是一种即时通讯的方案。

于是我心血来潮就开始做了。。

最后结果如下:

GIF演示:

我本地开两个浏览器自己和自己聊天是完全没问题的,可以显示最后聊的12条消息,输入框输入后按回车消息实时显示在最下面,页面不自动刷新。

后面部署到服务器上和舍友测试了一下也是完全没问题的,和远在台湾的女票测试有时候消息会闪。。应该是网络问题吧。。毕竟使用的是ajax短轮询还是挺受网络影响的。

——————————————————————————————————————————

原理:

输入框输入原理:给输入框赋上按回车的事件,按下回车用ajax把当前选择的身份和输入框内的内容提交到后台,存储在数据库中。

显示聊天记录的原理:利用ajax从后端获取数据库中最后12条的数据(我这里用了jquery的$.get()方法)。然后设置交互时间,前端不断从后端获取数据,我这里设置的是每0.5秒从后端获取一次数据并显示。所以实际使用起来和QQ的效果一样,基本感受不到对方聊天的延时。

——————————————————————————————————————————

代码:

chat.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><!-- jQuery静态库。--><script src="http://cdn.static.runoob.com/libs/jquery/2.1.1/jquery.min.js"></script><script type="text/javascript">$(document).ready(function (){var message = "";setInterval(function(){getdata();},500);function getdata() {$.get("getdata.php",function (data) {var count = 0;for (a in data){count++;}var show = 0;for (a in data){if ( show >= count-15 ){message += "<p>"+ data[a].username + "" + data[a].message+"</p>";$("#show_message").html(message);}show++;}message = "";});}$("#ckq").keydown(function(e){    //按下键盘触发函数if(e.keyCode==13){            //如果按下的是回车var user = $('input:radio:checked').val();$.ajax({url: "chat.php",type: "post",async: false,data: {"in":$("#ckq").val(),"username":user}});getdata();$("#ckq").val("");}});})</script><style type="text/css"></style></head>
<body><p id="message">小董与晴晴的对话:</p>
选择身份:<input type="radio" name="sex" value="小董" checked>小董
<input type="radio" name="sex" value="晴晴">晴晴
<br>
<div id="show_message">
</div>
<input type="text" id="ckq" name="in"></body>
</html>

connection.php:(都是默认用户名密码,选择了我自己的数据库app_phptest2017,如果有改就改成对应的就行了)

<?php
session_start();
error_reporting(0); //。。加这个就不显示提示
$servername = "localhost";
$username = "root";
$password = "";
//$server_db_name = "app_phptest2017";$con = mysql_connect($servername,$username,$password);if (!$con)
{die('Could not connect: ' . mysql_error());
}mysql_query("set names 'utf8'");mysql_select_db("app_phptest2017", $con);$sql = "CREATE TABLE IF NOT EXISTS `mymessage` (  messageID int NOT NULL AUTO_INCREMENT,username char(30) NOT NULL,message char(30) NOT NULL,  PRIMARY KEY (messageID) 
) ENGINE=InnoDB DEFAULT CHARSET=gbk; "  ;mysql_query($sql);?>

  chat.php (用来插入数据):

<?phpinclude ("connection.php");$sql = "INSERT INTO mymessage (message,username) VALUES('$_POST[in]','$_POST[username]')";
mysql_query($sql);?>

  getdata.php (用来从后端获取json格式数据并输出):

<?php
include ("connection.php");
header('content-type:application/json;charset=utf8');$result = mysql_query("select message,username from mymessage");$results = array();
while ($row = mysql_fetch_assoc($result)) {   //mysql_fetch_assoc() 函数从结果集中取得一行作为关联数组,返回根据从结果集取得的行生成的关联数组!,如果没有更多行,则返回 false。$results[] = $row;
}$jsonResult =  json_encode($results);echo $jsonResult;mysql_close();
?>

  

在本地服务器下创建以上四个文件并把代码复制进去就可以了,大家可以开两个浏览器运行一下试试看。

目前只能显示最后十二条,之后还可以添加一些滚动栏显示之前的消息之类的功能,以后再说了,本来也是做着玩。

——————————————————————————————————

结论:初步尝试了一下Web端即时通讯,还是挺有意思的。然而ajax短轮询与服务器交互太频繁了,没消息的时候总是进行一些无意义的交互,浪费资源,现在这项技术已经被淘汰了,还是学学websocket好。

文章原地址:http://www.cnblogs.com/dhx96/p/6804442.html

转载于:https://www.cnblogs.com/yyjie/p/7488107.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_793896.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2015年免费的25款 WordPress 网站模板

2015年 WordPress 插件和主题的数量继续在增长。这一年&#xff0c;我们可以期待WP主题引入一些新的技术&#xff0c;从背景&#xff0c;自适应响应式图像到从背景图片中提取主色。 本文包含25款最近发布的 WordPress 主题列表。这些主题都是优质&#xff0c;免费的&#xff0c…

10月理钓鱼网站简报:非CN域名9743个 环比涨5.5倍

IDC评述网&#xff08;idcps.com&#xff09;11月17日报道&#xff1a;近日&#xff0c;中国反钓鱼网站联盟发布了《2015年10月钓鱼网站处理简报》。据报告显示&#xff0c;10月份&#xff0c;联盟共处理钓鱼网站10193个&#xff0c;环比上月约增加566%&#xff0c;上升幅度十分…

应用程序和网站上怎么运用MathType

2019独角兽企业重金招聘Python工程师标准>>> 在众多的网站与应用程序中&#xff0c;很多都不能直接输入MathType公式&#xff0c;那怎样才能在应用程序和网站中插入MathType公式呢&#xff1f; TeX是针对数学方面的一种文件语言格式&#xff0c;但是它使用起来不是很…

教你使用GitHub搭建个人网站

GitHub源码分享 微信搜索&#xff1a;码农StayUp 主页地址&#xff1a;https://gozhuyinglong.github.io 源码分享&#xff1a;https://github.com/gozhuyinglong/blog-demos 1. 创建一个代码仓库 登录你的GitHub&#xff0c;点击右上角的 号按钮&#xff0c;选择【New repos…

大型网站架构体系的演变(上)

互联网上有很多关于网站架构的各种分享&#xff0c;有些主要是从运维和基础架构的角度去分析的&#xff08;堆机器&#xff0c;做集群&#xff09;&#xff0c;太关注技术细节实现&#xff0c;普通的开发人员基本看不太懂。 本文上篇将主要介绍大型网站基础架构的扩展&#xf…

大型网站架构体系的演变(下)

接着上篇继续 在做扩展满足了基本的性能需求后&#xff0c;我们会逐渐关注“可用性”&#xff08;也就是我们通常听别人吹牛时说的SLA、几个9&#xff09;。如何保证真正“高可用”&#xff0c;也是个难题 几乎主流的大中型互联网公司&#xff0c;都会有用到类似的架构&…

大型网站图片服务器架构的演进

在主流的Web站点中&#xff0c;图片往往是不可或缺的页面元素&#xff0c;尤其在大型网站中&#xff0c;几乎都将面临“海量图片资源”的存储、访问等相关技术问题。在针对图片服务器的架构扩展中&#xff0c;也会历经很多曲折甚至是血泪教训&#xff08;尤其是早期规划不足&am…

Android 开发常用软件与网站

1.开发工具以及环境 http://www.androiddevtools.cn/ 2.Sstack Overflow http://stackoverflow.com/ PS:多少次救我命,这个网站无需多说 3.iconfont阿里巴巴适量图标 http://www.iconfont.cn/ [4.在线JSON校验格式化] http://www.bejson.com/ 功能强大,而且比较全面 5.Android…

大型分布式网站缓存术语解释及解决方案

一、缓存穿透 定义&#xff1a;指有人用数据库中不存在的某个key访问&#xff0c;数据库中没有该key值&#xff0c;自然缓存中也不会有&#xff0c;该请求会直接到数据库。如果对该key的并发访问量过大&#xff0c;则会压垮数据库。 二、缓存雪崩 定义&#xff1a; 指缓存中…

IT人员必须知道的14个学习网站

作为从事多年一线技术开发人&#xff0c;现转岗项目管理的技术人员&#xff0c;从自身角度总结了N个对我学习挺大的学习网站&#xff0c;在这里与大家做个分享&#xff0c;供大家参考。 一、51CTO 51CTO是中国IT及互联网领域领先的专业垂直技术媒体&#xff0c;凭借专业的技术…

从域名到网站,快速创建全新社区站点 - phpwind一键部署操作文档

关于phpwind一键部署服务&#xff0c;请查阅PW官网&#xff1a;http://www.phpwind.com/setup.html 选择一键部署镜像版本&#xff0c;立即开始使用&#xff1a; PW建站系统&#xff08;Centos 64位&#xff09; ———— 本篇主要介绍从域名到网站&#xff0c;新用户如何能够…

如何一步一步用DDD设计一个电商网站(二)—— 项目架构

本系列所有文章 如何一步一步用DDD设计一个电商网站&#xff08;一&#xff09;—— 先理解核心概念 如何一步一步用DDD设计一个电商网站&#xff08;二&#xff09;—— 项目架构 如何一步一步用DDD设计一个电商网站&#xff08;三&#xff09;—— 初涉核心域 如何一步一步用…

SlideLive:免费的PPT模板网站

简介 在平时的学习和工作中&#xff0c;我们经常需要使用到PPT模板&#xff0c;包括课程报告、团体活动等。本文给大家介绍一款免费的PPT模板的网站——SlideLive。 官网地址&#xff1a;https://www.slidelive.cn SlideLive

MVC Core 网站开发(Ninesky) 2.1、栏目的前台显示(补充)

在2.1、栏目的前台显示中因右键没有添加视图把微软给鄙视了一下&#xff0c;后来有仔细研究了一下发现应该鄙视自己&#xff0c;其实这个功能是有的&#xff0c;是自己没搞清楚乱吐糟。 其实只要在NuGet中安装两个包&#xff08;Microsoft.VisualStudio.Web.CodeGeneration.Too…

SlideLive网站:如何实现个性化搜索

背景介绍 SlideLive是一款幻灯片在线播放和分享的网站&#xff0c;用户已上传的文档有10000。为了方便用于快速找到自己想要的PPT文档&#xff0c;SlideLive需要提供一个优质的搜索方案。本文将简介SlideLive搜索方案的设计与实现。 SlideLive官网地址&#xff1a;SlideLive&…

SlideLive网站:支持PPT嵌入网页中播放

简介 SlideLive 是一款幻灯片在线播放和分享的网站&#xff0c;同时支持将幻灯片嵌入到网页中。本文将具体介绍如何将幻灯片嵌入到自己的博客中。官网地址&#xff1a;https://slidelive.cn ## 具体步骤 步骤一&#xff1a;打开SlideLive官网&#xff0c;地址&#xff1a;h…

SlideLive网站:SPA单页应用SEO的思考与总结

简介 SlideLive网站的前端技术是Angular框架构建的SPA应用。SPA应用是一种客户端渲染技术&#xff0c;其工作原理是浏览器将js文件加载到浏览器中进行执行并渲染出html页面。对于SPA应用而言&#xff0c;目前Google和Bing搜索引擎可以很好的支持&#xff0c;能够有效的爬取网站…

SlideLive网站:人类历史上最伟大的PPT——SpaceX太空探索技术

简介 Elon Musk 在2016年和2017年都参加了国际宇航大会并做了主旨演讲&#xff0c;其中在2017年9月在澳大利亚阿尔莱德举行的国际宇航大会上&#xff0c;伊隆-马斯克做了“成为多星球物种&#xff08;Becoming a multi-planet species&#xff09;”的演讲&#xff0c;在这个演…

SlideLive网站:提供PPT模板在线播放和免费下载的功能

简介 SlideLive是一款幻灯片在线播放和分享的网站&#xff0c;其中包含大量的PPT模板素材。本文主要向大家介绍如何使用SlideLive免费下载PPT模板。 具体步骤 具体步骤分为三步&#xff1a; &#xff08;1&#xff09;打开SlideLive官网&#xff0c;地址&#xff1a;SlideL…

14款国内外精品PPT模板网站对比介绍

简介 在平日的学习和工作中&#xff0c;我们经常需要制作幻灯片&#xff0c;通过PPT模板和素材库可以帮助我们快速设计出符合心意的幻灯片。本文对14个国内外高质量PPT模板网站进行简单的对比分析&#xff0c;希望对您有所帮助。 国内PPT模板网站 1. SlideLive 网站地址&am…