微信小程序与Node服务器 Socket通讯

Socket通讯概述

多应用在软件开发中两个应用程序之间的通讯,俗称Socket通讯。

用于在两个的应用程序之间相互通信,socket是属于TCP\IP的上一层。最早出现在UNIX系统中,是UNIX系统主要的信息传递方式。在WINDOWS系统中,SOCKET称为WINSOCK。

两个基本概念:客户方和服务方。当两个应用之间需要采用SOCKET通信时,首先需要在两个应用之间(可能位于同一台机器,也可能位于不同的机器)建立SOCKET连接,发起呼叫连接请求的一方为客户方,接受呼叫连接请求的一方成为服务方。

客户方和服务方是相对的,同一个应用可以是客户方,也可以是服务方。

在客户方呼叫连接请求之前,它必须知道服务方在哪里。所以需要知道服务方所在机器的IP地址或机器名称,如果客户方和服务方事前有一个约定就好了,这个约定就是PORT(端口号)。也就是说,客户方可以通过服务方所在机器的IP地址或机器名称和端口号唯一的确定方式来呼叫服务方。

在客户方呼叫之前,服务方必须处于侦听状态,侦听是否有客户要求建立连接。一旦接到连接请求,服务方可以根据情况建立或拒绝连接。

连接方式有两种,同步方式(Blocking)和异步方式(noBlocking)。

客户方发送的消息可以是文本,也可以是二进制信息流。当客户方的消息到达服务方端口时,会自动触发一个事件(event),服务方只要接管该事件,就可以接受来自客户方的消息了。

创建 Node socket服务器

使用 ws 模块 创建 Node socket服务器

ws是nodejs的一个WebSocket库,可以用来创建服务,需要通过“npm install ws”命令进行安装后才可使用。

github地址:https://github.com/websockets/ws

安装依赖:

npm init

npm i ws -S

main.js:

//创建socket服务器
let Ws = require("ws").Server;
let wss = new Ws({
    
    
    port: 8282
})
wss.on("connection", function(ws) {
    
    
    console.log("Server has a new connection")
    //接收客户端接收的json数据
    ws.on("message", res => {
    
    
        //转成对象
        console.log(JSON.parse(res))
        //发送数据给客户端
        ws.send(JSON.stringify({
    
    
            data: "serverData"
        }));
    })
    ws.on("close", res => {
    
    
        console.log('Server is now closed');
        // ws.close();
    })
    ws.on('error', function(err) {
    
    
        console.log('Error occurred:', err.message);
    });
})

运行服务器

node main.js

微信小程序客户端

创建一个 WebSocket 连接并监听 WebSocket 接受到服务器的消息事件

SocketTask

SocketTask.send(Object object)
通过 WebSocket 连接发送数据

SocketTask.close(Object object)
关闭 WebSocket 连接

SocketTask.onOpen(function listener)
监听 WebSocket 连接打开事件

SocketTask.onClose(function listener)
监听 WebSocket 连接关闭事件

SocketTask.onError(function listener)
监听 WebSocket 错误事件

SocketTask.onMessage(function listener)
监听 WebSocket 接受到服务器的消息事件

示例:

//ws是webScoket对象
let ws = wx.connectSocket({
    
    
	url: 'ws://localhost:8282',
})
//接收服务器端发来的数据
ws.onMessage(function (res) {
    
    
	console.log("onMessage", res)
})
//打开socket连接,
ws.onOpen(function () {
    
    
	 // 发送消息给服务器端
	ws.send({
    
    
		data: JSON.stringify(
		{
    
    
			data: "clientData",
		}
		)
	})
})
setTimeout(() => {
    
    
	ws.close()
}, 5000);

Socket连接并发数

  • 1.7.0 及以上版本,最多可以同时存在 5 个 WebSocket 连接。
  • 1.7.0 以下版本,一个小程序同时只能有一个 WebSocket 连接,如果当前已存在一个 WebSocket 连接,会自动关闭该连接,并重新创建一个 WebSocket 连接。

效果图

服务端:

在这里插入图片描述
客户端:

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_44646763/article/details/127358922