这里描述个基于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. Java——网络

    [通信协议分层]   (1)为什么要分层?  

  2. BP算法演示

    本文转载自https://mattmazur.com/2015/03/17/a-step-by-step-backpropagation-example/ Background Backpropaga ...

  3. PG_CONFIG-NOTFOUND

  4. BFC、IFC、GFC和FFC

    基本概念 Box 是 CSS 布局的对象和基本单位, 直观点来说,就是一个页面是由很多个Box 组成的.元素的类型和 display 属性,决定了这个 Box 的类型. 不同类型的 Box, 会参与不 ...

  5. CG-CTF | 综合题

    开场就是一个js混淆,直接丢到console里面 然后根据tip查头: 看到这个tip,一开始还以为要考注入了,用访问历史来进行注入,后来发现是我高估这题了,,,:

  6. 音频学习(一)-离线播放(AVAudioPlayer)

    最后更新:2017-05-23 方法 - (nullable instancetype)initWithContentsOfURL:(NSURL *)url error:(NSError **)out ...

  7. python大佬养成计划----HTML DOM

    什么是DOM? DOM (Document Object Model) 译为文档对象模型,是 HTML 和 XML 文档的编程接口.HTML DOM 定义了访问和操作 HTML 文档的标准方法.DOM ...

  8. Linux内核调试方法总结之反汇编

    Linux反汇编调试方法 Linux内核模块或者应用程序经常因为各种各样的原因而崩溃,一般情况下都会打印函数调用栈信息,那么,这种情况下,我们怎么去定位问题呢?本文档介绍了一种反汇编的方法辅助定位此类 ...

  9. hive_action

    w pdf469 [不直接MR访问数据的工具   查询间接转化为MR] https://en.wikipedia.org/wiki/Apache_Hive Apache Hive supports a ...

  10. fedora23使用Xwayland的gnome-shell

    gnome是桌面管理系统的名称, 包括gnome, kde, xfce等等 同时, gnome是旧的gnome 2 的桌面管理 在gnome 3中, 桌面管理系统叫做gnome shell. gnom ...