workerman、websocket简单聊天功能从0到1实现
一、workerman安装,测试环境为linux
1、在网站根目录,用命令行安装,要是出现root权限提示,输入y回车就行,或者新建一个用户再进入安装
Linux系统可以使用以下脚本测试本机PHP环境是否满足WorkerMan运行要求。curl -Ss https://www.workerman.net/check | php
上面脚本如果全部显示ok,则代表满足WorkerMan要求
安装命令:
设置镜像
由于国内访问composer比较慢,建议设置阿里云composer镜像,运行如下命令设置阿里云代理
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
安装workerman
在根目录中运行composer require workerman/workerman

2、安装后的效果图如下,或者直接下载官方代码包复制进来


3、开启服务器2345端口,测试服务器为腾讯云,在腾讯云控制平台开启就行
4、在根目录建一个start.php的文件,内容如下所示:
<?php
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
require_once __DIR__ . '/vendor/autoload.php'; $global_uid = 0;
// 当客户端连上来时分配uid,并保存连接,并通知所有客户端
function handle_connection($connection)
{
global $text_worker, $global_uid;
// 为这个连接分配一个uid
$connection->uid = ++$global_uid; } // 当客户端发送消息过来时,转发给所有人
function handle_message(TcpConnection $connection, $data)
{
global $text_worker;
foreach($text_worker->connections as $conn)
{ // $conn->send("user[{$connection->uid}]"."进来了");
$conn->send($data);
}
} // 当客户端断开时,广播给所有客户端
function handle_close($connection)
{
global $text_worker;
foreach($text_worker->connections as $conn)
{ $conn->send("user[{$connection->uid}] logout");
}
} // 创建一个Worker监听2347接口
$text_worker = new Worker("websocket://0.0.0.0:2345"); // 只启动1个进程,这样方便客户端之间传输数据
$text_worker->count = 1; $text_worker->onConnect = 'handle_connection';
$text_worker->onMessage = 'handle_message';
$text_worker->onClose = 'handle_close'; Worker::runAll();
5、在根目录用命令进行启动,我在宝塔上启动的,加了-d 可以关闭启动窗口后进程不死
启动命令:php start.php start -d
停止命令:php start.php stop
重启命令:php start.php restart

6、再建一个静态html页面进行测试,ws地址要换成你的ip或者网站都行,我的是ws://d.aaa.net:2345内容如下:
<!doctype html>
<html> <head>
<meta charset="utf-8">
<title>websocket测试</title>
<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
</head> <body>
<input type="text" id="roomid" value="无名">房间号
<br/>
<input type="text" id="firstname" value="你好"><button onclick="testsend()">发送</button><button onclick="closeaa()">关闭</button>
<br>
<div id="content"></div>
<script type="text/javascript">
ws = new WebSocket("ws://d.aaa.net:2345");
ws.onopen = function() {
alert("连接成功");
};
ws.onmessage = function(e) {
//alert("收到服务端的消息:" + e.data);
var re = JSON.parse(e.data);
//document.getElementById('content').innerHTML +=re+"<br/>";
document.getElementById('content').innerHTML +=re.roomid+"说:"+re.content+"<br/>";
}; function testsend(){
var roomid = document.getElementById('roomid').value;
var word = document.getElementById('firstname').value;
var re={"roomid":roomid,"content":word}
//var re = roomid+'.'+word;
ws.send(JSON.stringify(re));
}
function closeaa(){
if(ws){
ws.close();
alert("已经关闭");
}
return false;
}
</script>
</body> </html>
7、到这里就结束了,可以把这个html页面上传到服务器上发给别人进行测试一下,我这里效果如下

要是做点对点聊天,建议用GatewayWorker
workerman、websocket简单聊天功能从0到1实现的更多相关文章
- spring boot集成websocket实现聊天功能和监控功能
本文参考了这位兄台的文章: https://blog.csdn.net/ffj0721/article/details/82630134 项目源码url: https://github.com/zhz ...
- 基于vs2015 SignalR开发的微信小程序使用websocket实现聊天功能
一)前言 在微信小程上实现聊天功能,大致有三种方式:1)小程序云开发 2)购买第三方IM服务 3)使用自己的服务器自己开发. 这里重要讲使用自己的服务器自己开发,并且是基于vs的开发. 网上提供的解决 ...
- 在Spring Boot框架下使用WebSocket实现聊天功能
上一篇博客我们介绍了在Spring Boot框架下使用WebSocket实现消息推送,消息推送是一对多,服务器发消息发送给所有的浏览器,这次我们来看看如何使用WebSocket实现消息的一对一发送,模 ...
- websocket 实现聊天功能
<html> <head> <base href="<%=basePath%>"> <title>webscoket t ...
- Tornado WebSocket简单聊天
Tornado实现了对socket的封装:tornado.web.RequestHandler 工程目录: 1.主程序 manage.py import tornado.web import torn ...
- socket 编程 TCP 实现简单聊天功能【转】
转自:http://blog.csdn.net/liujia2100/article/details/9006479 版权声明:本文为博主原创文章,未经博主允许不得转载. 各个主要函数的功能: .so ...
- 基于java 的websocket的聊天功能,一开始初始化websocket,执行打开连接之后就直接关闭连接了。
1 错误描述: java 后台没有报错,但是就是连接不上,一连上又自动关闭. 2 错误根源: 缺少jar包. 对比了报错的tomcat 的jar包和不报错的jar包 发现是tomcat下缺少上图绿色框 ...
- 采用tcp协议和UDP协议实现简单的聊天功能
Date: 2019-06-19 Author: Sun 一. Python3输出带颜色字体 实现过程: 终端的字符颜色是用转义序列控制的,是文本模式下的系统显示功能,和具体的语言无关. 转义 ...
- Spring 学习——基于Spring WebSocket 和STOMP实现简单的聊天功能
本篇主要讲解如何使用Spring websocket 和STOMP搭建一个简单的聊天功能项目,里面使用到的技术,如websocket和STOMP等会简单介绍,不会太深,如果对相关介绍不是很了解的,请自 ...
- JAVA结合WebSocket实现简单客服聊天功能
说明:该示例只简单的实现了客服聊天功能. 1.聊天记录没有保存到数据库中,一旦服务重启,消息记录将会没有,如果需要保存到数据库中,可以扩展 2.页面样式用的网上模板,样式可以自己进行修改 3.只能由用 ...
随机推荐
- 转载:Windows Server查看W3SVC IIS服务器中对应的网站日志
W3SVC日志文件夹中序号的含义,格式就是W3SVC+网站ID 如果没有自定义站点的日志路径,日志默认的路径是C:\inetpub\logs\LogFiles\ 基本上每个网站存放日志的文件夹名称都是 ...
- 基于Kubernetes(k8s)部署Dubbo+Nacos服务
一.说明 本文介绍基于 Kubernetes(k8s) 环境集成阿里云 私有镜像仓库 来部署一套 Dubbo + Nacos 的微服务系统,并使用 Kubernetes DNS 以及 port-for ...
- SQL统计(一)
参考博客: https://blog.csdn.net/GuTiDong/article/details/81326787 按月份统计每个月的订单总金额 https://blog.csdn.net/h ...
- Flutter 2 渲染原理和如何实现视频渲染
7 月 17 日下午,在前端专场巡回沙龙北京站中,声网Agora跨平台开发工程师卢旭辉带来了<Flutter2 渲染原理和如何实现视频渲染>的主题分享,本文是对演讲内容的整理. 本次分享主 ...
- Scanner进阶用法
Scanner进阶用法 判断是否为整数,浮点数 package charpter2; import java.util.Scanner; public class Scanner3 { public ...
- Markdown 的常用语法
声明(叠甲):鄙人水平有限,本文章仅供参考. 且本文章是一个不全的分享,只有我目前用的比较多的语法,如果有什么错误,欢迎大家指正.具体可以查看该网站 写博客我使用的是 Markdown,为熟悉 Mar ...
- 《C++ STL编程轻松入门基础》溯源
由一PDF文档(<认识 C++STL>--Vtech Electronic Ltd (SZ) VTE/TV2 terrcy tang)而来,以为不完整,寻求更完全版. 后搜索"第 ...
- 机器学习08DAY
线性回归 波士顿房价预测案例 步骤 导入数据 数据分割 数据标准化 正规方程预测 梯度下降预测 # 导入模块 import pandas as pd # 导入数据 from sklearn.model ...
- 职场「OKR」,魔幻又内卷
个人习惯称之为[O-KR-KPI]组合: 01 从进厂实习那天开始,就接触了KPI的概念: 互联网公司,年初入职,可能因为那天是周五,又赶上月底,少不了要把KPI搬出来折腾一番: 天时,地利,人和: ...
- React的行内样式与CSS
如何为组件添加 CSS 的 class? 传递一个字符串作为 className 属性: render() { return <span className="menu navigat ...