这里描述个基于swoole的websocket 匿名群聊
UI

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>即时通讯系统</title> <link rel="stylesheet" href="css/style.css" media="screen" type="text/css" /> </head> <body> <div id="convo"> 登录用户id:<input type="text" name="user" > <button class="login">登录</button> <ul class="chat-thread"> </ul> <!--聊天框-->
<div class="chat-window">
<input class="chat-window-message" name="chat-window-message" autocomplete="on" placeholder="请输入内容按回车键发送" type="text" value="123">
</div> </div>
<!--引入jq文件-->
<script src='jquery.js'></script>
<script type="text/javascript"> $('.login').on('click' , function(){
uid = $('[name=user]').val().trim();
if(uid ==''){
alert('请先登录');
}else{
socketlogin(uid);
}
}) var socket; function socketlogin(uid){ socket=new WebSocket('ws://103.60.221.52:9502?uid=' + uid); socket.onopen=function()
{
socket.send(setMsg(1,'用户'+uid+"你好",uid));
console.log('连接成功');
} socket.onmessage=function(e)
{
console.log('接收数据'); console.log(e);
$('.chat-thread').append('<li class="left">'+e.data+'</li>');
} socket.onclose= function()
{
$('.chat-thread').append('<li class="left">退出聊天室</li>');
} } $(document).keydown(function(e){
if(e.keyCode==13){
var speak=$('.chat-window-message').val(); $('.chat-thread').append('<li>'+speak+'</li>');
$('.chat-window-message').val(''); socket.send(setMsg(2,speak,uid)); }}) function setMsg(type,msg , uid){
var msgObject = {
type:type,
msg: msg ,
uid: uid ,
}
return JSON.stringify(msgObject);
} </script>

server.php

<?php 

// 存储在线客户的数组
$userFdList = []; $server = new swoole_websocket_server("0.0.0.0", 9502); $server->on('open',function($server,$requset) use(&$userFdList){ //$userFdList[$request->get['uid']] = $request->fd ; 用于给特定人发送情况 $server->push($requset->fd,"欢迎来到同性交友群"); }); $server->on('message',function($server,$frame) use(&$userFdList){ $datas = json_decode($frame->data , true); // var_dump($datas); // var_dump($userFdList); //匿名群聊
foreach($server->connection_list() as $key =>$val){
$server->push($val,"{$datas['msg']}"); } // 特定人发送
// if($datas['type'] == 1){
// $server->push($userFdList[$datas['uid']], "系统:{$datas['msg']}");
// } else if( !isset($userFdList[$datas['to_uid']])) {
// $server->push($userFdList[$datas['uid']], "系统:用户没上线");
// } else {
// $server->push($userFdList[$datas['to_uid']], "别人(uid:{$datas['uid']}):{$datas['msg']}");
// } // $server->push($frame->fd,{$frame->data});
}); $server->on('close', function($server, $fd) use (&$userFdList){
echo "connection close: {$fd}\n"; // 特定人发送
// foreach ($userFdList as $key => $value) {
// if( $value == $fd ) unset($userFdList[$key]);
// }
}); $server->start(); ?>
 
用户123.png
 
用户7889.png
 
用户123接受到7889发的消息.png

作者:云窗96
链接:https://www.jianshu.com/p/2b2a70f7b557
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

websocket和基于swoole的简易即时通讯的更多相关文章

  1. 基于Android 平台简易即时通讯的研究与设计[转]

    摘要:论文简单介绍Android 平台的特性,主要阐述了基于Android 平台简易即时通讯(IM)的作用和功能以及实现方法.(复杂的通讯如引入视频音频等可以考虑AnyChat SDK~)关键词:An ...

  2. 通过python的socket库实现简易即时通讯小程序

    前言 最近学习了一下有关tcp协议和socket有关的知识,看到许多socket实战都喜欢教如何做一个聊天程序,于是想着试试能不能不看教程自己写一个.当然我没太多时间做一个像qq一样的ui界面,所以做 ...

  3. C语言 linux环境基于socket的简易即时通信程序

    转载请注明出处:http://www.cnblogs.com/kevince/p/3891033.html      ——By Kevince 最近在看linux网络编程相关,现学现卖,就写了一个简易 ...

  4. Socket.IO介绍:支持WebSocket、用于WEB端的即时通讯的框架

    一.基本介绍 WebSocket是HTML5的一种新通信协议,它实现了浏览器与服务器之间的双向通讯.而Socket.IO是一个完全由JavaScript实现.基于Node.js.支持WebSocket ...

  5. Web端即时通讯技术盘点:短轮询、Comet、Websocket、SSE

    1. 前言 Web端即时通讯技术因受限于浏览器的设计限制,一直以来实现起来并不容易,主流的Web端即时通讯方案大致有4种:传统Ajax短轮询.Comet技术.WebSocket技术.SSE(Serve ...

  6. 新手入门:史上最全Web端即时通讯技术原理详解

    前言 有关IM(InstantMessaging)聊天应用(如:微信,QQ).消息推送技术(如:现今移动端APP标配的消息推送模块)等即时通讯应用场景下,大多数都是桌面应用程序或者native应用较为 ...

  7. Web端即时通讯技术原理详解

    前言 有关IM(InstantMessaging)聊天应用(如:微信,QQ).消息推送技术(如:现今移动端APP标配的消息推送模块)等即时通讯应用场景下,大多数都是桌面应用程序或者native应用较为 ...

  8. openfire+asmack搭建的安卓即时通讯(一) 15.4.7

    最进开始做一些android的项目,除了一个新闻客户端的搭建,还需要一个实现一个即时通讯的功能,参考了很多大神成型的实例,了解到operfire+asmack是搭建简易即时通讯比较方便,所以就写了这篇 ...

  9. web 端即时通讯

    1. 前言 Web端即时通讯技术因受限于浏览器的设计限制,一直以来实现起来并不容易,主流的Web端即时通讯方案大致有4种:传统Ajax短轮询.Comet技术.WebSocket技术.SSE(Serve ...

随机推荐

  1. 【bzoj1146】[CTSC2008]网络管理Network

    题目描述: M公司是一个非常庞大的跨国公司,在许多国家都设有它的下属分支机构或部门.为了让分布在世界各地的N个部门之间协同工作,公司搭建了一个连接整个公司的通信网络.该网络的结构由N个路由器和N-1条 ...

  2. R which

    setwd("E:/courses/molecular biology/homework1st") genes <- read.table('genes.txt',sep = ...

  3. Linux 安装R包

    https://www.cnblogs.com/jessepeng/p/10984983.html Linux 的R环境,可以通过anaconda jupyter notbook很容易的配置,见我之前 ...

  4. 安装JDK ,提示 错误1316 指定的账户已存在

    基于情况: 安装了一个JDK 后,在文件目录中删除了相关文件,之后再次安装,提示  错误1316 指定的账户已存在 造成原因:安装JDK,相当于安装了一个软件,要使用系统的软件卸载功能卸载,不能只删除 ...

  5. uploadify上传插件参数的一些设置

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  6. (实战)多边形,梯形盒阴影css实现技巧

    一般情况下,我们给块状元素(四边形)添加阴影样式,直接用css box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1);就可以了,但是总有一些需求是那么的特别,例如下图: ...

  7. LinkedBlockingDeque 源码分析

    LinkedBlockingDeque LinkedBlockingDeque 能解决什么问题?什么时候使用 LinkedBlockingDeque? 1)LinkedBlockingDeque 是基 ...

  8. 从 2017 OpenStack Days China 看国内云计算的发展现状

    目录 目录 China Runs On OpenStack 私有云正式迈入成熟阶段 混合云的前夜已经来临 China Runs On OpenStack OpenStack Days China 作为 ...

  9. js中ajax请求返回的数据处理成数组后,局部变量赋值给全局变量后,为空

    第二步是想把ss的值扔给res_r,两个数组直接相等即可,可谁想到,取出来的值是空. 如图取出来的值是空. 我一脸懵逼,调试了些许时间,最后把ss遍历一下,在重新push进res_r 再来看效果,已经 ...

  10. javascript中json字符串对象转化

    li = [1,2,3,4] s = JSON.stringify(li)  ---转化为字符串 JSON.parse(s) --转化为对象