微信小程序局域网通信

基于 mDNS 协议实现 http 和 socket 通信

Windows 上未找到可用的 mDNS 服务发现工具,Linux 上可使用 avahi,MacOS 上可使用 Bonjour

本项目使用 Linux 作为通信终端。

项目地址:https://github.com/MuBeiSAMA/lan-communication-mp

技术栈

服务端(Linux)

安装 avahi

1
sudo apt-get install avahi-utils

注册服务

1
avahi-publish-service -s "yourServiceName" _http._tcp 1111

参数分别为:服务名称,服务类型,端口号。

运行后即可在局域网中被发现。

运行 server

nodejs,npm 或 yarn 为必备环境,不做赘述。

先进入 server 文件夹

1
cd server

安装依赖

1
2
3
4
5
# 使用 yarn
yarn

# 或使用 npm
npm i

运行脚本

1
node index.js

终端打印 listening on *:1111 即表示运行成功,将持续监听 1111 端口,与注册服务时暴露的端口号一致。

脚本基于 express 和 socket.io 分别提供了 http 和 socket 的通信能力。

客户端(小程序)

小程序局域网通信详情可见 局域网通信

服务发现

1
2
3
4
5
6
7
8
9
10
11
12
13
/**
* 开始搜索局域网下的 mDNS 服务。搜索的结果会通过 wx.onLocalService* 事件返回。
* @param { object } object.serviceType 必填项 要搜索的服务类型
*/
wx.startLocalServiceDiscovery({
serviceType: '_http._tcp.'
})

/**
* 监听 mDNS 服务发现的事件
* @param {function} callback 发现了服务的回调,参数为单个服务数据
*/
wx.onLocalServiceFound(function callback)

服务数据

onLocalServiceFound 方法回调中的数据如图:

server data

根据数据中的 ip 和 port 信息,即可进行 http 和 socket 通信。

Tips

  • 一些 OS 可能不支持 mDNS 服务发现,这时可使用微信开发工具的真机调试功能进行调试。
作者

朷北

发布于

2019-09-26

更新于

2021-04-15

许可协议

评论