前一段时间需要做一个小demo,把温湿度传感器采集到的数据同步显示在浏览器网页上。抽了点时间把demo做了出来,虽然是个小demo,功能也比较简单,但是做的时候还是踩了一些坑,记录一下流程。

参考链接:https://www.cnblogs.com/zjfree/p/6491740.html

1. 下载安装workman

workman:官网地址
workman开发文档:官网文档地址

根据文档所说:

WorkerMan实际上就是一个PHP代码包,如果你的PHP环境已经装好,只需要把WorkerMan源代码或者demo下载下来即可运行。

这里我选择用composer安装

composer require workerman/workerman

2. 代码实现

<?php
use Workerman\Worker;require_once __DIR__ . '\Workman\Autoloader.php';// 设置时区
date_default_timezone_set("PRC");// websocket 协议的worker
$ws_worker = new Worker('Websocket://0.0.0.0:5678');
// 这里只能写1
$ws_worker->count = 1;
// websocket server 启动后在当前进程增加一个socket监听
$ws_worker->onWorkerStart = function($ws_worker)
{// 增加一个Socket端口的监听设备发来的数据$socket_worker = new Worker('tcp://0.0.0.0:1236');// 当设备发来数据时如何处理$socket_worker->onMessage = function($connection, $data){// 这里处理设备发来的数据 $data// 比如像这样给所有的WebSocket连接转发数据global $ws_worker;if ($data === FALSE) return;foreach($ws_worker->connections as $ws_con){$data = json_encode(['code'=>666,'data'=>$data]);$ws_con->send($data);}};// 给ws_worker添加一个属性保存socket_worker,方便获取// 之前ws接收的数据一直推送不到tcp,问题就在这里,这里要保存一下$ws_worker->socketWorker = $socket_worker;// 执行监听$socket_worker->listen();
};// websocket协议也就是浏览器发来数据时
$ws_worker->onMessage = function($connection, $data)
{// 假设需要转发给所有的设备global $ws_worker;foreach($ws_worker->socketWorker->connections as $socket_con){// 处理业务代码}
};Worker::runAll();

其中遇到的问题就是,websocket端接收到的数据无法发送到tcp,直到看到

$ws_worker->socketWorker = $socket_worker;

把socket_worker保存在ws_worker里,再ws推送信息时,循环数组,达到推送所有设备的目的。

3. 前端代码实现

<script>var wsObj = new WebSocket("ws://ip:port");   //建立连接wsObj.onopen = function(){ var ms = {code:200,msg:"success"};wsObj.send(JSON.stringify(ms));};wsObj.onmessage = function(ev){  //获取后端响应var msg=eval("("+ev.data+")");// 格式化json数据if (msg['code'] == 666) {var data = msg['data']var res = eval("("+ data +")")// 处理数据}};wsObj.onclose = function(ev){// 断开连接alert("close");};wsObj.onerror = function(ev){// 连接出错alert("error");};
</script>

具体的业务代码就不上了。

4. 小结

wokerman还是比较好用的,这个demo没有选择使用原生socket服务,也是为了节约时间和成本,快速实现开发目的。

workman 搭建tcp服务器,和websocket互相通信相关推荐

  1. 基于Python Tkiner、thread与socket实现的简单多人聊天室,在Python中创建TCP服务器与客户端进行通信

    基于Python Tkiner.thread与socket实现的简单多人聊天室,在Python中创建TCP服务器与客户端进行通信 完整代码下载地址:基于Python Tkiner.thread与soc ...

  2. 在Linux上搭建TCP通信测试服务器

    在Linux上搭建TCP通信测试服务器 前言 在 Linux平台上搭建TCP通信测试服务器的方法多种多样,本文就列举出来非常简单的服务器搭建方法. 搭建TCP通信测试服务器的主要作用就是为了验证TCP ...

  3. 在阿里云ECS上搭建Skynet服务器与Unity通信

    在阿里云ECS上搭建Skynet服务器与Unity通信 创建阿里云ECS实例 Skynet搭建 服务端代码部分 客户端部分(Unity) 创建阿里云ECS实例 这部分的话按照阿里云流程去做就可以了.也 ...

  4. 简易TCP服务器搭建

    目录 一.套接字及其分类 二.相关接口函数 三.TCP服务器搭建流程 1.创建套接字socket() 2.保存服务器信息 3.套接字绑定 4.监听客户端连接请求 5.接收客户端连接请求 6.数据收发 ...

  5. linux tcp 服务器 c,Linux网络编程篇之Tcp协议介绍, C/S通信及聊天室实现

    基于tcp协议的网络程序流程图如下: tcp协议网络程序流程图 服务器调用socket().bind().listen()完成初始化后,调用accept()阻塞等待,处于监听端口的状态 客户端调用so ...

  6. 【TCP网络编程】C语言实现TCP服务器和客户端之间的通信(linux)

    功能描述 利用TCP网络通信实现客户端和服务器的通信 服务器代码 server.c #include<stdio.h> #include<sys/socket.h> #incl ...

  7. QT网络编程——TCP服务器和客户端通信

    目录 一.服务器端 1.QT中TCP服务器的开发思路 2.QT服务器界面设计 3.QT服务器代码实现 二.客户端 1.QT中TCP客户端的开发思路 2.QT客户端界面设计 3.QT客户端代码实现 网络 ...

  8. libevent实现TCP服务器通信

    libevent实现TCP服务器通信 1.libevent库安装 1.1 libevent库优点 1.2源码包安装步骤 2.libevent框架 2.1创建事件 2.2添加事件到 event_base ...

  9. 使用EMQX搭建MQTT服务器,实现设备的通信(1)

    一.前言 最近我们选择智能家居方面的比赛.课设,为了保存学习记录,所以用文章来记录一下我们从软件到硬件的整个实现的过程,同时希望能帮助也想要实现相关功能的小伙伴. 二.MQTT介绍 (可跳过) MQT ...

  10. TCP/IP,单进程服务器与客户端连接通信,ipv4,TCP传输,无复用简单实例,nc模拟客户端连接服务器

    TCP/IP,单进程服务器与客户端连接通信,ipv4,TCP传输,无复用简单实例 一.实例设定 1.服务器与客户端均是本机,服务器绑定的ip可以是宏INADDR_ANY,这个宏表示可以和本机的所有网卡 ...

最新文章

  1. pandas使用itertuples函数迭代dataframe中的数据行并自定义修改行中的数值(update row while iterating over the rows)
  2. 在Windows应用程序中使用正则表达式
  3. 高级C语言教程-C语言函数setjmp()函数
  4. python怎样将list转化成字典_在python 中如何将 list 转化成 dictionary
  5. 关于WinCE6.0补丁包的一点说明
  6. STM8L051F3_0d_基础介绍
  7. 计算机网络第七版谢希仁习题,计算机网络 释疑与习题解答 谢希仁 第7七版 计算机网络(第7版)谢...
  8. Boost电路调试心得
  9. 3-19JavaScript
  10. bat一键清理系统垃圾/系统日志
  11. 简单说下antv图表的使用
  12. 【vs】 试图加载格式不正确的程序
  13. 盘点各大互联网公司2017中秋月饼设计,你最喜欢哪一个?
  14. 一键修复手机电池_怎么恢复手机电池寿命(教你一键修复电池损耗)
  15. 【Nginx】configure 报错checking for C compiler … not found
  16. 出现报错No such file or directory: experiments/coco/w32/w32_4x_reg03_bs10_512_adam_lr1e-3_coco_x140.yaml
  17. Matlab公网通信的实现(NAT123实现内网穿透)
  18. 合法与不合法的标识符
  19. GVM踩坑记录之:rsync: connection unexpectedly closed 和 rsync: read error: Connection reset by peer (104)
  20. android爬取视频播放地址,Android 视频中抓取图像 - MediaMetadataRetriever

热门文章

  1. 求解矩阵特征值的QR算法
  2. github上关于iOS的各种开源项目集合 (转载)
  3. 什么是Microsoft 365?
  4. html 中长单词换行问题
  5. [安卓逆向]安卓逆向-一次简单的静态分析
  6. 运维安全:微软远程桌面修改默认远程端口
  7. numpy结构化数组
  8. 如果你相中上了一个程序员小伙
  9. “会说话的汤姆猫家族-时代逐光者”3D数字藏品中奖名单公布
  10. mme 服务器位置,MME、PGW、SGW和PCRF的介绍