最近公司拓展业务,需要做一个即时聊天业务,就顺带研究了一下swoole,文档地址贴出来:https://wiki.swoole.com/

文档写得很详细,demo也很简洁明了,所以废话就不多说了。

工具:centOS、php、swoole、websocket

1.服务端代码,文件命名为start.php

<?php
//创建websocket服务器对象,监听0.0.0.0:9502端口
$server = new swoole_websocket_server("0.0.0.0", 9502);
//监听WebSocket连接打开事件
$server->on('open', function (swoole_websocket_server $server, $request) {
//实现多人通信,需要将连接标识fd存储起来,最简便的办法就是写文件,不习惯的话可以选择更高大上的处理方式
file_put_contents( __DIR__ .'/log.txt' , $request->fd);
});
//监听WebSocket消息事件
$server->on('message', function (swoole_websocket_server $server, $frame) {
$fd_msg = file_get_contents( __DIR__ .'/log.txt');
//fd是从1开始的哦,否则会报错
for ($i=1 ; $i<= $fd_msg; $i++) {
$server->push($i, $frame->fd.' 说: '.$frame->data);//循环广播
}
});
//监听WebSocket连接关闭事件
$server->on('close', function ($ser, $fd) {
echo "client {$fd} closed\n";
});
//开启服务
$server->start();

2.在服务端运行该文件,使用 php start.php命令

3.编辑一个客户端页面,命名为send.php

<!DOCTYPE html>
<html>
<head>
<title></title>
<meta charset="UTF-8">
<script type="text/javascript">
var ws = new WebSocket("ws://192.168.1.124:9502");//这里是服务器的地址,如果用于本地测试,本地host请务必也使用该地址,可以不加端口号
ws.onopen = function (event) {
ws.send('ws connect success!');
};
function message(callback)
{
ws.onmessage = function (event) {
var data = event.data;
callback(data);
}
} function info(str)
{
var div = document.createElement('div');
div.innerHTML=str;
var container = document.getElementById('container');
container.appendChild(div);
}
message(info);
</script>
</head>
<body>
<div id="container"></div>
<input type="text" id="content">
<button onclick="ws.send( document.getElementById('content').value )">发送</button>
</body>
</html>

4.配置好虚拟机,执行一下看一看

页面写得很糙,懒得写了,如果有兴趣可以华丽丽地写一个高的大的页面哦。

swoole简易实时聊天的更多相关文章

  1. 基于swoole的网页一对一实时聊天

    需求分析 网站上实现一对一即时沟通,能查看聊天记录以及离线留言,新消息提醒. 核心技术 html5的websocket,php的swoole扩展http://wiki.swoole.com/ 数据表 ...

  2. 网页实时聊天之PHP实现websocket

    html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,bi ...

  3. php websocket-网页实时聊天之PHP实现websocket(ajax长轮询和websocket都可以时间网络聊天室)

    php websocket-网页实时聊天之PHP实现websocket(ajax长轮询和websocket都可以时间网络聊天室) 一.总结 1.ajax长轮询和websocket都可以时间网络聊天室 ...

  4. 网页实时聊天之PHP如何实现websocket

    网页实时聊天之PHP如何实现websocket 一.总结 一句话总结: 应用 PHP 的 socket 函数库:PHP 的 socket 函数库跟 C 语言的 socket 函数非常类似 PHP 实现 ...

  5. Web端在线实时聊天,基于WebSocket(前后端分离)

    这是一个简易的Demo,已经实现了基础的功能 之前一直想实现一个实时聊天的系统,一直没有去实践他.有一天吃饭的时候扫码点菜,几个人点菜能够实时更新,当时就在想,这应该是同一种技术. 刚好前段时间项目上 ...

  6. SignalR实现网页实时聊天功能

    SignalR是利用html5 sokit方式实现网页的实时性,在客户端不支持html5的情况下通过轮询实现 实现原理是客户端发送的消息先去服务器,然后服务器根据需要将消息广播到需要接收信息的客户群. ...

  7. 网页实时聊天之js和jQuery实现ajax长轮询

    众所周知,HTTP协议是无状态的,所以一次的请求都是一个单独的事件,和前后都没有联系.所以我们在解决网页实时聊天时就遇到一个问题,如何保证与服务器的长时间联系,从而源源不段地获取信息. 一直以来的方式 ...

  8. 使用SignalR+Asp.net创建实时聊天应用程序

    一.概述: 使用 ASP.NET 那么 SignalR 2 创建一个实时聊天应用程序.将 SignalR 添加 MVC 5 应用程序中,并创建聊天视图发送并显示消息. 在Demo中,将学习Signal ...

  9. 我的学习笔记之node----node.js+socket.io实时聊天(1) (谨此纪念博客开篇)

    本想着从hello word开篇,也确实写了相关学习笔记.各种原因吧,现在又着急写出作品,便作罢. 这里将记录一个node.js+socket.io的实时聊天程序.(当然我也是跟着网上各种教程资料学习 ...

随机推荐

  1. 零基础入门学习Python(21)--函数:lambda表达式

    知识点 lambda 表达式 Python 允许使用lambda关键字创建匿名函数 lambda 函数怎么使用? 单个参数 >>> def add(x): return 2*x + ...

  2. python爬虫入门01:教你在 Chrome 浏览器轻松抓包

    通过 python爬虫入门:什么是爬虫,怎么玩爬虫? 我们知道了什么是爬虫 也知道了爬虫的具体流程 那么在我们要对某个网站进行爬取的时候 要对其数据进行分析 就要知道应该怎么请求 就要知道获取的数据是 ...

  3. DFS求连通块(漫水填充法)

    G - DFS(floodfill),推荐 Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I6 ...

  4. uva 1592 Database (STL)

    题意: 给出n行m列共n*m个字符串,问有没有在不同行r1,r2,有不同列c1,c2相同.即(r1,c1) = (r2,c1);(r1,c2) = (r2,c2); 如 2 3 123,456,789 ...

  5. JDBC--JAVA数据库连接相关

    JDBC API提供了以下接口和类: DriverManager: 这个类管理数据库驱动程序的列表.确定内容是否符合从Java应用程序使用的通信子协议正确的数据库驱动程序的连接请求.识别JDBC在一定 ...

  6. Leetcode 152.乘机最大子序列

    乘积最大子序列 给定一个整数数组 nums ,找出一个序列中乘积最大的连续子序列(该序列至少包含一个数). 示例 1: 输入: [2,3,-2,4] 输出: 6 解释: 子数组 [2,3] 有最大乘积 ...

  7. [luoguP1877] [HAOI2012]音量调节(DP)

    传送门 绝世傻DP #include <cstdio> #include <iostream> #define N 51 int n, s, mx; bool f[N][100 ...

  8. EasyUI单击行数据时动态编写editor

    $.extend($.fn.treegrid.methods, { addEditor: function (jq, param) { if (param instanceof Array) { $. ...

  9. pandas中计算总体标准差

    标准差(或方差),分为 总体标准差(方差)和 样本标准差(方差). 前者分母为n,后者为n-1.后者是无偏的. pandas里的 .std() 和 .var() 都是算的无偏的. 而numpy是有偏的 ...

  10. [bzoj2091][Poi2010]The Minima Game_动态规划

    The Minima Game bzoj-2091 Poi-2010 题目大意:给出N个正整数,AB两个人轮流取数,A先取.每次可以取任意多个数,直到N个数都被取走.每次获得的得分为取的数中的最小值, ...