最近公司拓展业务,需要做一个即时聊天业务,就顺带研究了一下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. thinkphp 5.0整合阿里大于验证码短信发送接口,含完整模型验证实例DEMO

    为大家分享一个阿里大于短信发送接口: 首先创建一个发送模型(Send.php): <?php namespace app\index\model; use think\Validate; cla ...

  2. linux纯字符界面不支持中文

    [2017-01-17] linux纯字符界面不支持中文

  3. shell脚本语言基本命令

    shell脚本语言基本命令脚本:可运行,不需要编译 #vi 1.sh[编写:i(顶格)或o(换一行)]#! /bin/bash##this is a test shell script##Writte ...

  4. 集训第五周动态规划 E题 LIS

    Description The world financial crisis is quite a subject. Some people are more relaxed while others ...

  5. 冒泡排序 and 选择排序 变量打印斐波拉契数列 and 数组打印斐波拉契数列

    1 排序 1.1 冒泡排序 #include <stdio.h> int main() { ]; printf("input six int numbers:\n"); ...

  6. FPGA学习笔记(六)—— 时序逻辑电路设计

    用always@(posedge clk)描述        时序逻辑电路的基础——计数器(在每个时钟的上升沿递增1) 例1.四位计数器(同步使能.异步复位) // Module Name: coun ...

  7. MySQL workbench8.0 CE基本用法(创建数据库、创建表、创建用户、设置用户权限、创建SQL语句脚本)

    原文地址:https://blog.csdn.net/zgcr654321/article/details/82156277 安装完成MySQL后,打开MySQL workbench8.0. 可以看到 ...

  8. B - Euler theorem 数学

    直接打表找规律 HazelFan is given two positive integers a,ba,b, and he wants to calculate amodbamodb. But no ...

  9. 静态区间第k大(划分树)

    POJ 2104为例[经典划分树问题] 思想: 利用快速排序思想, 建树时将区间内的值与区间中值相比,小于则放入左子树,大于则放入右子树,如果相等则放入左子树直到放满区间一半. 查询时,在建树过程中利 ...

  10. spring面试相关点

    刚刚开通博客,因为最近在进行各种面试,遇到各种面试问题,用这个机会整理几篇文章方便日后需要 springmvc 和springboot spring boot只是一个配置工具,整合工具,辅助工具. s ...