有对接过充电桩大佬,求教如何对接

临阵磨枪上岗充电桩,厂家发过来协议基于TCP/IP 的通信方式
没搞过相关方面,不知道这个是直接通信还是要使用mqtt这类

《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 45

是汽车电桩还是什么?是自营场站还是三方场站,如果是三方汽车充电中电联有个标准文档,直接对接就好啦。走http的

1年前 评论
臭鼬 (楼主) 1年前

最近也在弄一个基于tcp/ip的生鲜柜,对方说是stock通信。留个脚印。看看有没有php方案

1年前 评论
臭鼬 (楼主) 1年前
ononl (作者) 1年前
臭鼬 (楼主) 1年前
1年前 评论
臭鼬 (楼主) 1年前
美国总统 (作者) 1年前

走mqtt就好啦

1年前 评论

没有文档吗

1年前 评论
臭鼬 (楼主) 1年前
工匠 1年前

我是用wokerman实现业务,一般都是基于TCP/IP ⚠️:鉴于交互量较大,尽可能的少走数据库,后期电桩数量多上传多的话需要安装libevent扩展来支持N多设备的连接。正常代码就好,具体业务就看充电桩厂家的文档就好

1年前 评论
臭鼬 (楼主) 1年前
qiuwang 1年前
GDDD

workerman轻松解决,各种协议都支持

1年前 评论

留个眼,我目前也在对接共享洗车业务也涉及到这方面

1年前 评论
臭鼬 (楼主) 1年前
QIN秦同学
我这也需要对接板子,不过是很简单的那种,正在纠结用 php 还是 go 对接那,持续关注下本帖。
1年前 评论
臭鼬 (楼主) 1年前
zds

做过,用hyperf做了一半tcp服务。后面客户要求又改用java netty+springboot做。需要的话可以加个好友我和你说说之前的架构和逻辑

1年前 评论
mrpzx001 1年前

最近也在对接插座设备,监控电流数据,还有设备开关,用laravelS做胶水层,一般来说就是将设备上传的字节流字符串转成ASCII码,然后再转成十六进制,之后就是看着文档对接了

1年前 评论
臭鼬 (楼主) 1年前
silie (作者) 1年前

用python,过来人的建议

1年前 评论

具体不太清楚,我一般都是轮训后端接口

1年前 评论

TCP/IP是一种基础的网络通信协议,它定义了计算机之间如何在网络上进行数据传输。MQTT是一种基于TCP/IP协议的消息传输协议,它是为低带宽和不可靠网络环境设计的,主要用于物联网设备之间的通信。

如果厂家发过来的协议是基于TCP/IP的,那么你可以直接使用TCP/IP协议进行通信,不一定需要使用MQTT。但是,如果你的应用场景需要低带宽和高可靠性,或者需要实现设备之间的消息发布和订阅功能,那么使用MQTT可能会更加合适。

总的来说,是否使用MQTT取决于你的具体需求和应用场景。如果厂家没有明确要求使用MQTT,你可以根据自己的需求选择合适的通信方式。 Workerman是一个高性能的PHP socket服务器框架,可以用来开发TCP、UDP、UnixSocket、Websocket等多种协议的应用。以下是一个使用Workerman开发的基于TCP/IP的简单socket服务器和客户端的例子。

首先,确保你已经安装了Workerman。如果没有安装,可以通过Composer来安装:

bash composer require workerman/workerman 然后,创建一个名为tcp_server.php的文件,用于启动TCP服务器:

php <?php require_once DIR . '/vendor/autoload.php';

use Workerman\Worker;

// 创建一个Worker监听2345端口,使用tcp协议通讯 $tcp_worker = new Worker("tcp://0.0.0.0:2345");

// 启动4个进程对外提供服务 $tcp_worker->count = 4;

// 当客户端发来数据时 $tcp_worker->onMessage = function($connection, $data) { // 向客户端发送hello $data $connection->send('hello ' . $data); };

// 运行worker Worker::runAll(); 然后,创建一个名为tcp_client.php的文件,用于启动TCP客户端:

php <?php require_once DIR . '/vendor/autoload.php';

use Workerman\Worker; use Workerman\Connection\AsyncTcpConnection;

// 不需要设置 Worker,直接使用 AsyncTcpConnection 发送数据。 $connection = new AsyncTcpConnection('tcp://127.0.0.1:2345');

// 当连接建立成功时,发送数据 $connection->onConnect = function($connection) { echo "Connected to server\n"; $connection->send("Hello World\n"); };

// 当连接收到服务端发送的数据时,打印数据并关闭连接 $connection->onMessage = function($connection, $data) { echo "Received data: $data\n"; $connection->close(); };

// 如果连接失败,显示错误信息 $connection->onError = function($connection, $code, $msg) { echo "Error: $msg\n"; };

// 当连接关闭时,显示日志 $connection->onClose = function($connection) { echo "Connection closed\n"; };

// 连接服务端 $connection->connect(); 运行服务器:

bash php tcp_server.php start 在另一个终端运行客户端:

bash php tcp_client.php 客户端将连接到服务器,发送"Hello World"字符串,然后服务器会响应"hello Hello World"字符串。客户端收到响应后,将打印出来并关闭连接。

请注意,这只是一个非常基础的例子,实际使用中你可能需要处理更多的逻辑,比如异常处理、连接管理、协议编码解码等。

1年前 评论

刚好对接过两个厂家的tcp设备,用的swoole做的服务端

遇到几个比较明显的坑

  • 1、设备量如果不多的话,还是别开启coroutine,不然复杂程度暴增;
  • 2、对接厂家协议需要注意下二进制数据和二进制字符串的区别,这里有遇到一些坑,直接使用包长度检测解决黏包问题。
  • 3、如果需要控制指定设备还需要管理所有连接的fd和设备id的映射,建议是使用共用内存的实现进行管理(比如swoole 的table),使用redis的话就很痛苦。
  • 4、如果不幸使用coroutine,需要使用连接池管理连接(mysql和redis),这时候还要注意内存泄露的问题。
1年前 评论
臭鼬 (楼主) 1年前
redfish (作者) 1年前

设备打1量少tcp就好了,设备量过万就用mqtt

1年前 评论
臭鼬 (楼主) 1年前
baisegezishan (作者) 1年前

看了评论区又涨知识了

1年前 评论

这种直接gatewayworker最合适,网关协议自己实现一下,逻辑服务处理设备请求。

1年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!